EasyDBO由于一直沒(méi)有改進(jìn),所以前期出現(xiàn)的錯(cuò)誤很多,也是造成很多用戶無(wú)法正常運(yùn)行EasyJF論壇系統(tǒng)、簡(jiǎn)易java訂銷管理系統(tǒng)等有關(guān)EasyJF數(shù)據(jù)應(yīng)用的問(wèn)題。經(jīng)常遇到數(shù)據(jù)源連接不正確、程序運(yùn)行不正確、中文亂碼等問(wèn)題。下面把我看到的很多同學(xué)機(jī)器上的問(wèn)題總結(jié)歸類一下,作為終極解決之道,大家還遇到類似的問(wèn)題請(qǐng)參照一下該帖子的中的錯(cuò)誤解決方案,診斷原因,也可以直接按照終極解決方法解決遇到的問(wèn)題。 ?
一、先說(shuō)終極解決之道
?EasyJF開源團(tuán)隊(duì)從組建以來(lái),已經(jīng)發(fā)布了比較完整的三個(gè)應(yīng)用實(shí)例,即EasyJF論壇系統(tǒng)、Meybo Mail Web客戶端開源簡(jiǎn)化版以及簡(jiǎn)易Java開源訂銷管理系統(tǒng),其中EasyJF論壇系統(tǒng)及開源訂銷管理系統(tǒng)都用到了數(shù)據(jù)庫(kù),而這兩個(gè)系統(tǒng)也是大家反映問(wèn)題最多。根據(jù)最近見(jiàn)到的各種問(wèn)題,并搜集了大家在工作論壇中的交流情況,這里歸類整理一下所有的問(wèn)題。
?以供還沒(méi)有安裝好EasyJF開源實(shí)例的朋友以及準(zhǔn)備安裝的朋友參考。精力是有限的,時(shí)間是寶貴的,希望能少走點(diǎn)彎路。
?由于EasyDBO還是處于測(cè)試版階段,所以容錯(cuò)能力比較差,因此造成安裝過(guò)程中出現(xiàn)這樣那樣的問(wèn)題在所難免。當(dāng)然,造成無(wú)法正常安裝及應(yīng)用的原因主要不是所發(fā)布的代碼問(wèn)題,更多的是屬于安裝者具體環(huán)境的問(wèn)題。若是一臺(tái)從來(lái)沒(méi)有安裝過(guò)Java Web應(yīng)用環(huán)境的機(jī)器,只要用戶按照我們的提供的最簡(jiǎn)單的安裝說(shuō)明來(lái)安裝,肯定能正常運(yùn)行。還有很多是因?yàn)閿?shù)據(jù)庫(kù)安裝不當(dāng)所造成的問(wèn)題。
?這里所說(shuō)的終極解決之道,就是使用最笨的方法來(lái)安裝,雖然笨,而且很費(fèi)力,但肯定能裝好。:-)
?步驟如下(注意路徑也不能隨便省):
? 1、備份c盤的數(shù)據(jù),然后格式化c盤;(可省:-0)
? 2、在c盤上安裝windows等操作系統(tǒng);(可省:-0)
3、按安裝說(shuō)明下載并安裝jdk1.4.2版本,注意選擇安裝在c:\j2se1.4目錄。然后把系統(tǒng)變量中增加一個(gè)classpath項(xiàng),值為c:\j2se1.4。
4、按最前面的安半說(shuō)明下載并安裝tomcat5.0以上的版本。安裝路徑不要用默認(rèn)的,而是選擇d:\tomcat,完成后取動(dòng)tomcat。
5、刪除d:\tomcat\webapps\ROOT目錄中的所有東西.
6、把下載的系統(tǒng)解壓后拷到d:\tomcat\webapps\ROOT目錄里面.文件結(jié)構(gòu)大致如下d:\tomcat\webapps\ROOT\web-inf\lib\EasyJWeb0.5.jar;若不放心,還可以把下載的web-inf\lib目錄中的所有文件拷到d:\tomcat\common\lib目錄中。
? 7、安裝數(shù)據(jù)庫(kù)系統(tǒng).若是安裝MS SQL2000,則必須打上補(bǔ)丁3或以上的版本.注意是Sql的補(bǔ)丁,而不是其它的什么分析服務(wù)補(bǔ)丁。MS SQL不打補(bǔ)丁的話,jdbc是跑不起來(lái)的.
? 8、使用數(shù)據(jù)庫(kù)的管理工具(My SQL的話使用My Sql Front,MS SQL數(shù)據(jù)庫(kù)直接使用他的管理器)建立數(shù)據(jù)庫(kù)。然后把下載源碼中提供的數(shù)據(jù)表結(jié)構(gòu)生成腳本,否則庫(kù)及表都沒(méi)有是跑不起來(lái)。
? 9、修改d:\tomcat\webapps\ROOT\web-inf\classes\easyjf-dbo.xml文件,這個(gè)文件是有關(guān)你的應(yīng)用程序的數(shù)據(jù)庫(kù)配置文件,特別是用戶名、密碼及數(shù)據(jù)庫(kù)名要根據(jù)你實(shí)際安裝的來(lái)。配置文件的設(shè)置方法請(qǐng)按"EasyDBO配置文件easyjf-dbo.xml詳細(xì)說(shuō)明”這篇文章來(lái)配置。地址http://www.easyjf.com/html/20060427/31970563-6771387.htm
?
10、重啟動(dòng)tomcat
11、從地址欄中http://localhost:8080/bbs/,這下應(yīng)該得行了。
12、若終極方法還不行,你可以對(duì)照一下你所出現(xiàn)的問(wèn)題,參考后面提供的各種問(wèn)題的解決方案來(lái)找到問(wèn)題所在,并作相應(yīng)的處理。仍然不行的話你叫到官網(wǎng)上叫人過(guò)去幫你安裝了。若他們還搞不定,那真是鬼了、休息一周、然后下周重新買一臺(tái)機(jī)器來(lái)安裝吧!哈哈,只要有決心,我就不相信你搞不定!
?
備注:
?已經(jīng)確認(rèn)因?yàn)槲覀兊奈臋n失誤而造成的錯(cuò)誤可以這在里看到http://www.easyjf.com/html/bbs/20060419/23993816-1316542.htm
?另外,關(guān)于數(shù)據(jù)庫(kù)名字中間不有特殊符號(hào)實(shí)句號(hào)“.”。如數(shù)據(jù)庫(kù)名為easyjf.com是錯(cuò)的,而easyjf就OK。
二、EasyDBO沒(méi)有配置正確或者驅(qū)動(dòng)沒(méi)正確安裝引起的錯(cuò)誤
?問(wèn)題表現(xiàn):
?1、安裝好論壇系統(tǒng),能進(jìn)入主界面,但注冊(cè)總是失敗
?2、安裝好論壇,若使用My SQL數(shù)據(jù)庫(kù),firtPage.ejf出現(xiàn)報(bào)錯(cuò)信息
?3、安裝好簡(jiǎn)易訂銷管理系統(tǒng),但無(wú)法正常登錄。
?
?常見(jiàn)的錯(cuò)誤提示
?EasyJWeb框架錯(cuò)誤:
java.lang.Object
java.lang.ClassCastException: java.lang.Object
? at com.easyjf.bbs.business.BBSUtil.getTotalMember(BBSUtil.java:37)
? at com.easyjf.bbs.action.FirstPageAction.execute(FirstPageAction.java:38)
? at com.easyjf.web.RequestProcessor.getResult(RequestProcessor.java:90)
? at com.easyjf.web.RequestProcessor.process(RequestProcessor.java:65)
? at com.easyjf.web.ActionServlet.doRequest(ActionServlet.java:114)
? at com.easyjf.web.ActionServlet.doGet(ActionServlet.java:85)
? at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
? at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
?在以前發(fā)布的系統(tǒng)中,特別是EasyDBO0.2以前的版本,由于本身存在很多Bug,所以造這樣的錯(cuò)誤的概念是比較大的,造成這樣的問(wèn)題的時(shí)候一個(gè)主要原因是easyjf-dbo.xml文件沒(méi)配置對(duì),另外一個(gè)原因是由于你所安裝機(jī)器的某些特殊性,造成classpath比較混亂,也或許是EasyDBO的一些Bug。
?這里主面講第一個(gè)原因。
?easyjf-dbo.xml文件的位置放在web-inf\classes\easyjf-dbo.xml,由于我們提供給大家的是源代碼src目錄下也有一個(gè)easyjf-dbo.xml文件。所以若你是用記事本改的話要直接修改的話直修改classes\easyjf-dbo.xml文件即可。修改首先要保證文件格式正確,即用IE打開可以正常顯示;其次就是相應(yīng)的設(shè)置要正確,即用戶名、密碼、數(shù)據(jù)庫(kù)名要跟你所安裝的一致,修改后要重新啟動(dòng)web服務(wù)器tomcat。
?配置不正確的另外一個(gè)原因是有可能你的EasyDBO是使用0.2以下的版本,這個(gè)版本不支持中文路徑或者含有特殊格式字符的路徑。請(qǐng)把相關(guān)的EasyDBO.jar全部刪除掉,直接下載一個(gè)新的_0.4.0版本的jar文件,放到classpath中即可。
三、ClassPath路徑不正確
1、問(wèn)題表現(xiàn):
a、打開程序報(bào)下面的錯(cuò)誤
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
? com.easyjf.dbo.DataSourceManager.init(DataSourceManager.java:44)
? com.easyjf.dbo.config.XMLConfigFactory.initDataSource(XMLConfigFactory.java:91)
? com.easyjf.dbo.config.XMLConfigFactory.init(XMLConfigFactory.java:55)
? com.easyjf.dbo.config.DBOConfig.init(DBOConfig.java:36)
? com.easyjf.dbo.config.DBOConfig.getDataSource(DBOConfig.java:53)
? com.easyjf.dbo.DataSourceManager.getDataSource(DataSourceManager.java:65)
b、本來(lái)easyjf-dbo.xml文件設(shè)置的數(shù)據(jù)庫(kù)是用MS SQL,但啟動(dòng)的時(shí)候日志中發(fā)現(xiàn)如下的錯(cuò)誤信息:
? “數(shù)據(jù)庫(kù)類型(方言)配置錯(cuò)誤,系統(tǒng)將使用默認(rèn)MySQL數(shù)據(jù)類型方言!”,前面還有提示某個(gè)Class找不到的錯(cuò)誤信息。
2、問(wèn)題分析及解決
?造成這些問(wèn)題的原因有很多,由于Java的東西太多了,相應(yīng)的軟件也很多,大家可能之前也在運(yùn)行其它的東西,可以Web服務(wù)器的版本,JDK的版本,ClassPath的設(shè)置等都各式各樣。以致無(wú)法正常加載一些類,這不是我們提供的下載源碼中少什么文件,而只要把classpth設(shè)置正確即OK。
? 這里不說(shuō)具體怎么設(shè)置類路徑,由于Web服務(wù)器啟動(dòng)的時(shí)候會(huì)把某個(gè)目錄下的所有類加載到classpath中,比如tomcat\common\lib中所有類。因此,你只需要把所有有關(guān)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)、數(shù)據(jù)庫(kù)連接池、EasyDBO、EasyJWeb等相關(guān)的jar文件全部拷到comcat\common\lib目錄中即可。若提示已經(jīng)存在則直接替換掉即可。
?另外一個(gè)重要的注意事項(xiàng)是,是管是tomcat\common\lib中,還是web-inf\lib中,必須保證只有一個(gè)EasyDBO_xx.jar,即保留最新版本的那個(gè),其它版本的EasyDBO必須刪除掉。
四、數(shù)據(jù)庫(kù)安裝不正確的錯(cuò)誤
?這個(gè)主要針對(duì)很多新手,特別是Java Web新手。
?安裝數(shù)據(jù)庫(kù)的時(shí)候有幾點(diǎn)需要注意:
?1、安裝MS SQL的話,在選擇身份驗(yàn)證方式的時(shí)候,不要選擇“僅windows驗(yàn)證”,而是選擇“Sql Server和windows”。
?2、安裝MS SQL的話,必須安裝SP3或以上sql 補(bǔ)丁,否則jdbc是無(wú)法連接你所裝的數(shù)據(jù)庫(kù)的。
?3、安裝My SQL的話,需要把默認(rèn)字符集設(shè)置成gbk(論壇)或gb2312(簡(jiǎn)易訂銷管理系統(tǒng))。
?
?數(shù)據(jù)庫(kù)安裝不正確,就不可能正常連接數(shù)據(jù)庫(kù),不能正常連接數(shù)據(jù)庫(kù)就無(wú)法正常使用EasyDBO,不能正常使用EasyDBO也就不能正常使用我們提供的源代碼。“我的神啊........”
五、My SQL中文亂碼的錯(cuò)誤
?EasyDBO本身不存在中文亂碼問(wèn)題的,按照我們提供的安裝說(shuō)明及配置文件的話,MS SQL是不可能有亂碼問(wèn)題。中文亂碼問(wèn)題到目前為止我們只在My SQl中見(jiàn)到,這個(gè)需要設(shè)置My SQl數(shù)據(jù)庫(kù)的默認(rèn)字符集,需要把默認(rèn)字符集設(shè)置成gbk(論壇)或gb2312(簡(jiǎn)易訂銷管理系統(tǒng))。
詳情請(qǐng)參照:
?http://www.easyjf.com/html/bbs/20060325/1638923979008732.htm
?設(shè)置默認(rèn)字符集有一個(gè)細(xì)節(jié),大家注意看下面兩幅圖的區(qū)別:
圖二
六、主鍵生成算法的錯(cuò)誤(謝謝beyond同學(xué)提供)
問(wèn)題表現(xiàn):
安裝好論壇后,但是就是不能回貼(回貼時(shí)數(shù)據(jù)添加不到數(shù)據(jù)庫(kù)里)
解決辦法:
EasyDBO中的主鍵生成算法我只隨便寫了一個(gè)的,新版本中的主鍵生成使用com.easyjf.dbo.RandomIdGenerator??赡苓@個(gè)實(shí)現(xiàn)有點(diǎn)問(wèn)題,沒(méi)太多測(cè)試過(guò),也許存在致命錯(cuò)誤。
其中內(nèi)容如下:String id=this.hashCode()+""+date.hashCode();
? ? ?//System.out.println(id); ? ?
? ? ?return id.substring(0,16); ? ?
3、仿照RandomIdGenerator自己實(shí)現(xiàn)一個(gè)IIdGenerator生鍵生成器,然后把PO中的getKeyGenerator方法改成你自己的主鍵生成器。
public String getKeyGenerator() {
? ? ?return "com.easyjf.dbo.RandomIdGenerator";
?}
詳情請(qǐng)參照:
?beyond同學(xué)寫的“安裝EasyJFbbs遇到的幾個(gè)問(wèn)題及解決” http://www.easyjf.com/html/bbs/20060414/7430873-17461327.htm
?