昨天玩h2的時候想起來的, 這年頭把在線應用報裝成桌面應用是越來越流行了,幾年前做過類似的事情,簡單介紹一下。
1. 選擇一個嵌入的web 服務器和 數據庫。
web服務器我選擇的是jetty,雖然tomcat也有類似的嵌入版本,但是體積和性能都還是有點差距。 如果你的應用使用了大量的ajax效果,建議選擇6的版本,對并發支持更好。
數據庫方面我原來用的是hsql,現在可以選擇h2. 兩者的sql 兼容性都比較好,擴展功能也比較強。如果原來的應用在mysql上進行開發,則基本不用做修改, h2現在有mysql兼容模式,如果原來應用使用的是db2或者oracle,則你可能需要把一些函數和過程改用java實現,h2提供了這方面的支持。 數據問題方面也不用擔心,h2目前比較成熟了,而且最大可以提供256g的文件支持。我做過一些測試,關機,死機,都還可以恢復的比較好。
h2的一個特性是支持只讀數據庫,所以你也可以選擇將數據庫備份成zip文件以后,以光盤的方式發布應用,很適合做大量分發的演示光盤,比較酷吧。
jetty+h2的組合占用系統資源非常少,而且速度極快, 在我成功移植以后,我的一個同事吃驚的發現速度要比原來的online版本提高了很多。一般用戶幾乎感覺不到在線操作的那種停頓。
java6自帶的那個java數據庫就不要考慮了,速度慢,體積大,兼容問題多多。
2. 使用JDIC或者java6提供的一些native特性和桌面進行整合
主要使用諸如系統托盤來提供一些控制操作和輔助功能, 打開瀏覽器或者將瀏覽器嵌入到swing應用等等。我的做法是將瀏覽器嵌入到swing應用中,并做了一些小手腳,保證用戶不能使用瀏覽器直接訪問,這樣看起來更安全,更象桌面應用。
java6在這些方面有比較好的支持,6以前的版本可以使用JDIC,反正都是一回事。 另外可以選擇jgoodie之類的擴展包,讓你的桌面看起來更騷包一些。
當然,使用6的話啟動要快一些,特別是重復啟動的時候,java6還有的一個特性是splash的支持, 這樣在啟動的時候可以自然一些。
3. 對配置文件進行適當精簡,使用混淆工具編譯關鍵包
發布到桌面以后就意味著受攻擊指數增加了,增加適當的防范也是必要的,此處如果不怕麻煩,可以使用gcj來編譯。
4. 將執行包編譯成exe文件, 使用安裝工具打包
把java啟動類編譯成可執行文件的工具很多,我經過比較,使用的是launch4j,主要是支持的特性多一些,對linux也提供支持。
然后再把jre和應用整理規劃好目錄,使用安裝工具打包, 我選擇的是nsis, 也是免費的東西, nisi如果不想深入研究的話,建議找supertoy開發的一個腳本生成向導工具,很好用。
5. 其他
* 需要考慮數據的備份和交換操作, 我一般使用dbunit來干這個事, 因為導出導入都可以是完整的xml文件,比較方便。
* 如果要制作光盤版本,再配置一個auto run 就可以自動啟動了。
* 要防止應用多次啟動, 實現思路有2種,一個是使用一個端口來檢測, 另外一個就是使用文件鎖。 我使用的是后者,盜用了hsql的部分代碼。
基本思路很簡單,工作量也不大, 呵呵,反正當初用戶是看不出來這是java 做得,還誤以為我們是用delphi之類重新開發的。
1. 選擇一個嵌入的web 服務器和 數據庫。
web服務器我選擇的是jetty,雖然tomcat也有類似的嵌入版本,但是體積和性能都還是有點差距。 如果你的應用使用了大量的ajax效果,建議選擇6的版本,對并發支持更好。
數據庫方面我原來用的是hsql,現在可以選擇h2. 兩者的sql 兼容性都比較好,擴展功能也比較強。如果原來的應用在mysql上進行開發,則基本不用做修改, h2現在有mysql兼容模式,如果原來應用使用的是db2或者oracle,則你可能需要把一些函數和過程改用java實現,h2提供了這方面的支持。 數據問題方面也不用擔心,h2目前比較成熟了,而且最大可以提供256g的文件支持。我做過一些測試,關機,死機,都還可以恢復的比較好。
h2的一個特性是支持只讀數據庫,所以你也可以選擇將數據庫備份成zip文件以后,以光盤的方式發布應用,很適合做大量分發的演示光盤,比較酷吧。
jetty+h2的組合占用系統資源非常少,而且速度極快, 在我成功移植以后,我的一個同事吃驚的發現速度要比原來的online版本提高了很多。一般用戶幾乎感覺不到在線操作的那種停頓。
java6自帶的那個java數據庫就不要考慮了,速度慢,體積大,兼容問題多多。
2. 使用JDIC或者java6提供的一些native特性和桌面進行整合
主要使用諸如系統托盤來提供一些控制操作和輔助功能, 打開瀏覽器或者將瀏覽器嵌入到swing應用等等。我的做法是將瀏覽器嵌入到swing應用中,并做了一些小手腳,保證用戶不能使用瀏覽器直接訪問,這樣看起來更安全,更象桌面應用。
java6在這些方面有比較好的支持,6以前的版本可以使用JDIC,反正都是一回事。 另外可以選擇jgoodie之類的擴展包,讓你的桌面看起來更騷包一些。
當然,使用6的話啟動要快一些,特別是重復啟動的時候,java6還有的一個特性是splash的支持, 這樣在啟動的時候可以自然一些。
3. 對配置文件進行適當精簡,使用混淆工具編譯關鍵包
發布到桌面以后就意味著受攻擊指數增加了,增加適當的防范也是必要的,此處如果不怕麻煩,可以使用gcj來編譯。
4. 將執行包編譯成exe文件, 使用安裝工具打包
把java啟動類編譯成可執行文件的工具很多,我經過比較,使用的是launch4j,主要是支持的特性多一些,對linux也提供支持。
然后再把jre和應用整理規劃好目錄,使用安裝工具打包, 我選擇的是nsis, 也是免費的東西, nisi如果不想深入研究的話,建議找supertoy開發的一個腳本生成向導工具,很好用。
5. 其他
* 需要考慮數據的備份和交換操作, 我一般使用dbunit來干這個事, 因為導出導入都可以是完整的xml文件,比較方便。
* 如果要制作光盤版本,再配置一個auto run 就可以自動啟動了。
* 要防止應用多次啟動, 實現思路有2種,一個是使用一個端口來檢測, 另外一個就是使用文件鎖。 我使用的是后者,盜用了hsql的部分代碼。
基本思路很簡單,工作量也不大, 呵呵,反正當初用戶是看不出來這是java 做得,還誤以為我們是用delphi之類重新開發的。
可否再詳細些?
本人也有一個項目,使用了Jetty做內置服務器,實現基本web的控制臺功能。
http://www.aygfsteel.com/xmatthew/archive/2008/04/24/195745.html
其中的源代碼你也可下載看一下,當然針對本人作者的其它點的方法建議沒有實現,所以覺得不錯,可以嘗試一下。