數(shù)據(jù)通訊是當(dāng)前十分活躍與熱門的計(jì)算機(jī)與信息技術(shù)的應(yīng)用領(lǐng)域。某大型通信公司開發(fā)了其業(yè)務(wù)的主要支撐平臺(tái),在這里,我們簡稱之為“通信信息服務(wù)平臺(tái)”,用于在全國與全球開展數(shù)據(jù)業(yè)務(wù)的需要。該平臺(tái)是一個(gè)典型的Java技術(shù)應(yīng)用于Internet的項(xiàng)目。
作為信息技術(shù)公司中的一名技術(shù)骨干,我有幸參加了該系統(tǒng)的分析與設(shè)計(jì)工作,承擔(dān)了相當(dāng)多的Java應(yīng)用開發(fā)任務(wù)。此系統(tǒng)中的軟件部分大多由Java來實(shí)現(xiàn),在全系統(tǒng)中我們是這樣來用Java構(gòu)架系統(tǒng)的:
(1)本系統(tǒng)可分為4層,分別是Browser、表示層、中間件層和數(shù)據(jù)層。
(2)表示層用Java中的Java Script來實(shí)現(xiàn)頁面輸出。
(3)中間件層用Java來實(shí)現(xiàn)CORBA,即實(shí)現(xiàn)Component(構(gòu)件),主要實(shí)現(xiàn)業(yè)務(wù)邏輯的封裝與復(fù)用。
(4)數(shù)據(jù)層主要是數(shù)據(jù)庫和存儲(chǔ)過程的實(shí)現(xiàn)。
我們?cè)趹?yīng)用Java技術(shù)時(shí),所采用的技術(shù)和策略可大致上歸納為以下5個(gè)方面:
(1)使Java Script盡量簡單,因?yàn)镴ava Script在我們系統(tǒng)中是放在服務(wù)器端執(zhí)行的,該語言是通過一個(gè)解釋器解釋執(zhí)行的,相對(duì)速度很慢,我們采用了兩臺(tái)HP前置機(jī)來運(yùn)行Java Script,但是其運(yùn)行速度還是不理想,所以我們?cè)谠O(shè)計(jì)中把Java Script僅用來顯示從中間件層所得到的數(shù)據(jù),生成動(dòng)態(tài)頁面。在最初的設(shè)計(jì)中表示層(Java Script)曾承擔(dān)了一些業(yè)務(wù)邏輯處理操作,導(dǎo)致效率不理想,因此,我們不得不盡量地減少Java Script的程序量。
(2)用Java實(shí)現(xiàn)CORBA時(shí),應(yīng)盡量考慮共享和復(fù)用。在本系統(tǒng)中,最初的設(shè)計(jì)是讓Java在實(shí)現(xiàn)Component時(shí),只是執(zhí)行一些數(shù)據(jù)庫表的操作,導(dǎo)致表示層的負(fù)載較大。后來,我們重新設(shè)計(jì)時(shí),總結(jié)歸納了所有的Use Case,找出了其中可供共享和復(fù)用的接口,把相同的業(yè)務(wù)邏輯操作封裝到一個(gè)接口中去。因?yàn)?Java的執(zhí)行效率比Java Script要高,因此提高了系統(tǒng)效率。
(3)在別的項(xiàng)目中,我們?cè)罅康厥褂眠^Java中的JSP技術(shù)和Servlet技術(shù),一般人可能不能區(qū)分這兩種Java技術(shù)的區(qū)別。為了得到系統(tǒng)的一些執(zhí)行速率的數(shù)據(jù),我們采用了一個(gè)著名的壓力測試軟件——Load Runner來測試這兩種技術(shù)的差別。測試表明:用JSP和Servlet完成同樣的一個(gè)操作,并且保證是在相同的測試環(huán)境中(相同服務(wù)器、壓力測試工作站與數(shù)據(jù)庫環(huán)境),得到的測試數(shù)據(jù)卻有著很大差別,JSP完成一個(gè)操作的平均執(zhí)行時(shí)間大致會(huì)是Servlet程序的兩倍。在一個(gè)企業(yè)級(jí)應(yīng)用項(xiàng)目中,這可能是一個(gè)很關(guān)鍵的瓶頸。因此,我們得出的結(jié)論是:在可能的條件下,盡量地多使用Servlet。當(dāng)然,與Servlet相比,JSP編程快速,修改方便,在訪問量不是很大的應(yīng)用場合下也是可以接受的。
(4)使用Java作為整體解決方案時(shí),應(yīng)盡量使用相同版本的JDK。在用Java作為編程語言的項(xiàng)目中,幾乎大多要遇到“漢字”問題,即Java在沒有經(jīng)過轉(zhuǎn)換的情況下,在輸出漢字時(shí),很可能會(huì)出現(xiàn)亂碼。采用不同版本的JDK,解決的方案是不一樣的,比如V1.2.2版本的JDK和V1.3版本的JDK解決方法就會(huì)有一些不一樣,把V1.2.2的Java程序放在V1.3的JDK中,就不能順利輸出漢字了。其根本原因在于Java使用了Unicode編碼,和我們中國的國標(biāo)編碼不一樣。所以在這個(gè)意義上一些人竭力鼓吹的“一次編寫,到處運(yùn)行”似乎不一定能在所有的場合都行得通。
(5)使用Java時(shí),應(yīng)盡量遵從軟件規(guī)范。在Java中有一個(gè)JVM的概念,即在Java虛擬機(jī)中使用了一個(gè)垃圾收集器,專門用來回收內(nèi)存。但是該垃圾收集器在給編程人員帶來方便的同時(shí),也隱埋下了隱患。在程序設(shè)計(jì)中,并不能強(qiáng)制執(zhí)行垃圾收集器,所以,開發(fā)人員不能確定某對(duì)象是否已釋放,常常讓編程人員養(yǎng)成依賴自動(dòng)收集的壞習(xí)慣,因此我們要求:在Try,Catch之后必須明確要求回收內(nèi)存(當(dāng)然,也只能是通知垃圾收集器來回收垃圾),這樣可以有效地提高系統(tǒng)穩(wěn)定性。
以上這些實(shí)用性的技術(shù)與策略,是我們?cè)趯?shí)踐中的一些實(shí)際體會(huì),僅供各位開發(fā)人員根據(jù)實(shí)際情況參考!
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |