昨天玩h2的時(shí)候想起來(lái)的, 這年頭把在線應(yīng)用報(bào)裝成桌面應(yīng)用是越來(lái)越流行了,幾年前做過(guò)類似的事情,簡(jiǎn)單介紹一下。

1. 選擇一個(gè)嵌入的web 服務(wù)器和 數(shù)據(jù)庫(kù)。
web服務(wù)器我選擇的是jetty,雖然tomcat也有類似的嵌入版本,但是體積和性能都還是有點(diǎn)差距。 如果你的應(yīng)用使用了大量的ajax效果,建議選擇6的版本,對(duì)并發(fā)支持更好。
數(shù)據(jù)庫(kù)方面我原來(lái)用的是hsql,現(xiàn)在可以選擇h2. 兩者的sql 兼容性都比較好,擴(kuò)展功能也比較強(qiáng)。如果原來(lái)的應(yīng)用在mysql上進(jìn)行開發(fā),則基本不用做修改, h2現(xiàn)在有mysql兼容模式,如果原來(lái)應(yīng)用使用的是db2或者oracle,則你可能需要把一些函數(shù)和過(guò)程改用java實(shí)現(xiàn),h2提供了這方面的支持。 數(shù)據(jù)問(wèn)題方面也不用擔(dān)心,h2目前比較成熟了,而且最大可以提供256g的文件支持。我做過(guò)一些測(cè)試,關(guān)機(jī),死機(jī),都還可以恢復(fù)的比較好。

h2的一個(gè)特性是支持只讀數(shù)據(jù)庫(kù),所以你也可以選擇將數(shù)據(jù)庫(kù)備份成zip文件以后,以光盤的方式發(fā)布應(yīng)用,很適合做大量分發(fā)的演示光盤,比較酷吧。

jetty+h2的組合占用系統(tǒng)資源非常少,而且速度極快, 在我成功移植以后,我的一個(gè)同事吃驚的發(fā)現(xiàn)速度要比原來(lái)的online版本提高了很多。一般用戶幾乎感覺不到在線操作的那種停頓。

java6自帶的那個(gè)java數(shù)據(jù)庫(kù)就不要考慮了,速度慢,體積大,兼容問(wèn)題多多。

2. 使用JDIC或者java6提供的一些native特性和桌面進(jìn)行整合

主要使用諸如系統(tǒng)托盤來(lái)提供一些控制操作和輔助功能, 打開瀏覽器或者將瀏覽器嵌入到swing應(yīng)用等等。我的做法是將瀏覽器嵌入到swing應(yīng)用中,并做了一些小手腳,保證用戶不能使用瀏覽器直接訪問(wèn),這樣看起來(lái)更安全,更象桌面應(yīng)用。

java6在這些方面有比較好的支持,6以前的版本可以使用JDIC,反正都是一回事。 另外可以選擇jgoodie之類的擴(kuò)展包,讓你的桌面看起來(lái)更騷包一些。

當(dāng)然,使用6的話啟動(dòng)要快一些,特別是重復(fù)啟動(dòng)的時(shí)候,java6還有的一個(gè)特性是splash的支持, 這樣在啟動(dòng)的時(shí)候可以自然一些。

3.  對(duì)配置文件進(jìn)行適當(dāng)精簡(jiǎn),使用混淆工具編譯關(guān)鍵包

發(fā)布到桌面以后就意味著受攻擊指數(shù)增加了,增加適當(dāng)?shù)姆婪兑彩潜匾模颂幦绻慌侣闊梢允褂胓cj來(lái)編譯。

4.  將執(zhí)行包編譯成exe文件, 使用安裝工具打包

把java啟動(dòng)類編譯成可執(zhí)行文件的工具很多,我經(jīng)過(guò)比較,使用的是launch4j,主要是支持的特性多一些,對(duì)linux也提供支持。
然后再把jre和應(yīng)用整理規(guī)劃好目錄,使用安裝工具打包, 我選擇的是nsis, 也是免費(fèi)的東西, nisi如果不想深入研究的話,建議找supertoy開發(fā)的一個(gè)腳本生成向?qū)Чぞ撸芎糜谩?br />
5. 其他

  * 需要考慮數(shù)據(jù)的備份和交換操作, 我一般使用dbunit來(lái)干這個(gè)事, 因?yàn)閷?dǎo)出導(dǎo)入都可以是完整的xml文件,比較方便。
  * 如果要制作光盤版本,再配置一個(gè)auto run 就可以自動(dòng)啟動(dòng)了。
  * 要防止應(yīng)用多次啟動(dòng), 實(shí)現(xiàn)思路有2種,一個(gè)是使用一個(gè)端口來(lái)檢測(cè), 另外一個(gè)就是使用文件鎖。 我使用的是后者,盜用了hsql的部分代碼。

基本思路很簡(jiǎn)單,工作量也不大, 呵呵,反正當(dāng)初用戶是看不出來(lái)這是java 做得,還誤以為我們是用delphi之類重新開發(fā)的。