spark的自留地(ofbiz/eclipse rcp/shark/opentaps)

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            54 Posts :: 0 Stories :: 112 Comments :: 0 Trackbacks

          1、如何調試OFBiz
          首先你需要學習和熟悉OFBiz的教程與工具指導文檔。指導文檔特別重要,因為很多子主題內容不是排列最前的內容卻可能導致問題的發生。你應該熟悉類似于Freemaker,beanshell,XML這些技術。你也應該有過處理那些與OFBiz無關問題的經驗,比如處理數據庫或服務器引起的問題。
          現在,你應該仔細查看日志文件了解你錯誤發生的原因。OFBiz在日志文件中提供大量的信息,這些信息將有助于你了解你遇到的問題。它比處理的藝術更重要。哪些東西看上去工作有些特別,比如比如有些關聯程序將導致或影響到的結果,你都可以在日志文件中找到。如果你確實無法在日志文件中發現任何有用的東西,這時增加你自己的日志信息直到你有足夠的信息來發現實際的問題所在。
          本指引將向你介紹OFBiz的日志文件工作情況,如何增加你自己的日志記錄,以及一些常見信息的含義。這些知識的理解建立在你理解JAVA及其它相關的技術基礎上,所有問題的焦點只在于OFBiz的概念與信息內容中。

          2. OFBiz日志文件
          OFBiz創建較多日志文件并將它們存儲于logs/目錄(在opentaps-0.9或更早版本中)或framework/logs/(在opentaps-0.9之后版本),文件有:
           - ofbiz.log.? - 記錄所有OFBiz生成日志信息。此文件將在滿時自動循環創建新文件,即ofbiz.log是當前日志文件,ofbiz.log.1是較早些時間的日志文件,ofbiz.log.2是比ofbiz.log.1更早時間的日志文件,以此類推。
           - console.log - 記錄所有OFBiz在控制臺界面運行顯示的內容。也有可能無效。
           - access_log.? - 類似于Apache httpd日志格式記錄所有服務請求。很漂亮但對調試沒有什么用處。

          大多數據時間,你可以通過ofbiz.log或console.log來查詢調試信息。因為它們有很多內容,所以你最好使用一個可以翻頁與進行查找的編輯器來打開這些日志文件。


          3、查找日志信息
          Java日志信息最容易查找。它們的日志信息中通常有類名與行號生成:

          111770[PaymentGatewayServices.java:776:INFO ] (Capture) Invoice [#10110] total: 38.54

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

          112499[                Log.java:103:INFO ] Finished quickShipEntireOrder:\nshipmentShipGroupFacilityList=[[shipmentId=10120, facilityId=WebStoreWarehouse, shipGroupSeqId=00001]]\nsuccessMessageList=[Created shipment with ID [10120] for ship group ID [00001] for facility ID [WebStoreWarehouse]]

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

          2006-07-19 13:46:26,373 [  ServiceDispatcher.java:450:DEBUG] [[Sync service finished- total:0.027,since last(Begin):0.027]] - 'ecommerce / getProductCategoryAndLimitedMembers'
          parentCategory = TABLE-LINENS-SOLIDS 
          2006-07-19 13:46:26,874 [      PriceServices.java:802:INFO ] PromoPrice and ProductPriceAction had null amount and no default price was available, using list price: 2.0 for product with id 15899

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

          2006-07-19 13:46:26,373 [  ?:?] parentCategory = TABLE-LINENS-SOLIDS

          你可以為那些無法發現日志信息的minilang或beanshell代碼中加入自己的信息輸出。

          所有freemarker,screen-widget或form widget輸出的信息將直接顯示在你的瀏覽器屏幕上。除非這些控件崩潰否則不會顯示任何日志信息。

          4. 增加你自己的日志信息
          在Java中增加你自己的日志信息,請使用OFBiz Debug類(org.ofbiz.base.util.Debug)中的調試方法,如logInfo,logWarning, logError...
           示例:   Debug.logInfo("Now processing invoice " + invoiceId, module);

          在beanshell中增加日志信息,同樣使用Debug方法,但在內容中忽略如""這樣內容。

          在freemarker中增加日志信息,只需要顯示你打算跟蹤的變量,如:

             ${invoice}  <#-- 將顯示 invoice 的一般屬性值-->
             ${invoice.invoiceId}  
          <#-- 將顯示invoice.invoiceId屬性值 -->

           

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

             ${invoice}  <#-- will display the entire GenericValue invoice -->
             ${invoice.invoiceId}  
          <#-- will display the invoiceId field of invoice -->


          通常level節點屬性用于設置日志級別,如:"info", "warning", "error",對應于Debug中的同名方法。


          5. 何時需要重啟OFBiz

          你在做如下更改時需要重新啟動OFBiz服務器:
          - Java文件(記得要重新編譯)
          - 配置/.properties文件
          - entitymodel或entitygroup XML定義文件
          - 服務或secas XML文件
          - JPublish XML文件

          你在進行以下修改時無需重新啟動OFBiz服務器:
          - freemarker FTL模版
          - beanshell BSH模版
          - Screens XML文件
          - Forms XML文件
          - 控制器XML文件(注意:在opentaps-0.8和OFBiz 3.x及更早版本中,你在更改控制器時需要重啟)
          但有可能你需要在瀏覽器中清除緩存。
           

          6. 常見錯誤及其含義:

          Cannot locate service by name (captureBillingAccountPayment)

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

          Service method does not exist (com.opensourcestrategies.financials.invoice.InvoiceServices.setInvoiceDueDate(org.ofbiz.service.DispatchContext, java.util.Map))

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

          java.lang.IllegalArgumentException: Could not get next sequenced ID for sequence name: Party (Could not get next sequenced ID for sequence name: Party).   

             * 系統無法取得實體的下一個自動ID,通常發生于數據庫斷開情況。

          ERROR: insert or update on table "inventory_item" violates foreign key constraint "inv_item_facility"


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

          Error calling event: org.ofbiz.webapp.event.EventHandlerException: Service invocation error (Commit transaction failed)

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

          Unable to bind UserTransaction/TransactionManager to JNDI

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

          Message: The entity name must immediately follow the '&' in the entity reference.
          org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.

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

          本文檔譯自ofbiz 4.0 cookbooks,本人翻譯,歡迎轉載,請注明出處.
          posted on 2008-10-08 22:44 shanghai_spark 閱讀(2226) 評論(0)  編輯  收藏 所屬分類: opentaps
          主站蜘蛛池模板: 东阳市| 宁安市| 平凉市| 平武县| 克什克腾旗| 白城市| 互助| 周至县| 同德县| 沁水县| 天等县| 洪江市| 洛宁县| 永丰县| 交城县| 平利县| 方城县| 阿荣旗| 丽江市| 高安市| 达尔| 监利县| 朝阳县| 射洪县| 长治市| 宜君县| 呼和浩特市| 滦南县| 遵义县| 宁国市| 韶山市| 建水县| 浑源县| 北宁市| 烟台市| 苍南县| 辉南县| 额尔古纳市| 绥芬河市| 安阳市| 漠河县|