1、如何調(diào)試OFBiz
首先你需要學(xué)習(xí)和熟悉OFBiz的教程與工具指導(dǎo)文檔。指導(dǎo)文檔特別重要,因?yàn)楹芏嘧又黝}內(nèi)容不是排列最前的內(nèi)容卻可能導(dǎo)致問題的發(fā)生。你應(yīng)該熟悉類似于Freemaker,beanshell,XML這些技術(shù)。你也應(yīng)該有過處理那些與OFBiz無關(guān)問題的經(jīng)驗(yàn),比如處理數(shù)據(jù)庫或服務(wù)器引起的問題。
現(xiàn)在,你應(yīng)該仔細(xì)查看日志文件了解你錯誤發(fā)生的原因。OFBiz在日志文件中提供大量的信息,這些信息將有助于你了解你遇到的問題。它比處理的藝術(shù)更重要。哪些東西看上去工作有些特別,比如比如有些關(guān)聯(lián)程序?qū)?dǎo)致或影響到的結(jié)果,你都可以在日志文件中找到。如果你確實(shí)無法在日志文件中發(fā)現(xiàn)任何有用的東西,這時增加你自己的日志信息直到你有足夠的信息來發(fā)現(xiàn)實(shí)際的問題所在。
本指引將向你介紹OFBiz的日志文件工作情況,如何增加你自己的日志記錄,以及一些常見信息的含義。這些知識的理解建立在你理解JAVA及其它相關(guān)的技術(shù)基礎(chǔ)上,所有問題的焦點(diǎn)只在于OFBiz的概念與信息內(nèi)容中。
2. OFBiz日志文件
OFBiz創(chuàng)建較多日志文件并將它們存儲于logs/目錄(在opentaps-0.9或更早版本中)或framework/logs/(在opentaps-0.9之后版本),文件有:
- ofbiz.log.? - 記錄所有OFBiz生成日志信息。此文件將在滿時自動循環(huán)創(chuàng)建新文件,即ofbiz.log是當(dāng)前日志文件,ofbiz.log.1是較早些時間的日志文件,ofbiz.log.2是比ofbiz.log.1更早時間的日志文件,以此類推。
- console.log - 記錄所有OFBiz在控制臺界面運(yùn)行顯示的內(nèi)容。也有可能無效。
- access_log.? - 類似于Apache httpd日志格式記錄所有服務(wù)請求。很漂亮但對調(diào)試沒有什么用處。
大多數(shù)據(jù)時間,你可以通過ofbiz.log或console.log來查詢調(diào)試信息。因?yàn)樗鼈冇泻芏鄡?nèi)容,所以你最好使用一個可以翻頁與進(jìn)行查找的編輯器來打開這些日志文件。
3、查找日志信息
Java日志信息最容易查找。它們的日志信息中通常有類名與行號生成:

Minilang方法日志中的類名均為Log.java,如:

如果你在beanshell中直接使用輸出,你輸出的內(nèi)容將顯著的顯示于日志文件中:



如果你在beanshell中使用調(diào)試方法,你將在日志中得到如下信息:

你可以為那些無法發(fā)現(xiàn)日志信息的minilang或beanshell代碼中加入自己的信息輸出。
所有freemarker,screen-widget或form widget輸出的信息將直接顯示在你的瀏覽器屏幕上。除非這些控件崩潰否則不會顯示任何日志信息。
4. 增加你自己的日志信息
在Java中增加你自己的日志信息,請使用OFBiz Debug類(org.ofbiz.base.util.Debug)中的調(diào)試方法,如logInfo,logWarning, logError...
示例: Debug.logInfo("Now processing invoice " + invoiceId, module);
在beanshell中增加日志信息,同樣使用Debug方法,但在內(nèi)容中忽略如""這樣內(nèi)容。
在freemarker中增加日志信息,只需要顯示你打算跟蹤的變量,如:


在minilang中增加日志信息,使用<log >指令并輸入你的值,比如在freemarker中:


通常level節(jié)點(diǎn)屬性用于設(shè)置日志級別,如:"info", "warning", "error",對應(yīng)于Debug中的同名方法。
5. 何時需要重啟OFBiz
你在做如下更改時需要重新啟動OFBiz服務(wù)器:
- Java文件(記得要重新編譯)
- 配置/.properties文件
- entitymodel或entitygroup XML定義文件
- 服務(wù)或secas XML文件
- JPublish XML文件
你在進(jìn)行以下修改時無需重新啟動OFBiz服務(wù)器:
- freemarker FTL模版
- beanshell BSH模版
- Screens XML文件
- Forms XML文件
- 控制器XML文件(注意:在opentaps-0.8和OFBiz 3.x及更早版本中,你在更改控制器時需要重啟)
但有可能你需要在瀏覽器中清除緩存。
6. 常見錯誤及其含義:

* 此服務(wù) (captureBillingAccountPayment) 在所有 services.xml 定義中都找不到.
Cannot find service location (org.ofbiz.order.order.OrderServices)
* 說明在services XML定義點(diǎn)上指向的資源不存在. 如果這是一個minilang或beanshell服務(wù),即服務(wù)引擎無法找到此文件。如果這是一個Java服務(wù),則說明在classpath中無法查找到這個類。

* 含義是在某個services.xml指定的這個服務(wù)不存在對應(yīng)的Java方法。通常發(fā)生于你在修改了Java文件后忘記再次編譯它來使新增的方法生效。

* 系統(tǒng)無法取得實(shí)體的下一個自動ID,通常發(fā)生于數(shù)據(jù)庫斷開情況。

* 在"inventory_item"表的插入/修改操作時違犯"inv_item_facility"外鍵約束。

* 這是一個非常令人討厭的錯誤信息。通常它意味著你訪問的服務(wù)所觸發(fā)的ECA鏈服務(wù)中有一個服務(wù)失敗,于是導(dǎo)致全部的操作失敗。服務(wù)引擎無法為你進(jìn)一步跟蹤,所以你需要進(jìn)入log文件中進(jìn)一步查找錯誤原因。訪問你的logs/ofbiz.log 或logs/console.log文件去了解觸發(fā)錯誤的根本原因。

* 這是在opentaps 0.8/0.9及OFBiz的pre-Geronimo版本在Linux系統(tǒng)下可能會發(fā)生的一個問題. 解決方法可以在以下網(wǎng)址中找到:
http://lists.ofbiz.org/pipermail/users/2004-June/004094.html



* 這是一個 XSL:FO 錯誤并意味著你在文本中使了字符'&',比如說你在描述或地址中使了這個字符。 XSL:FO 使用xml屬性格式,所以你需要確認(rèn)你在文本字段后放置?xml。