`

关于OFBiz调试

阅读更多

    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

     

    7 . 远程 debug 调试:

    如果是自己写的 java 实现代码,或找到了 ofbiz java 实现代码,可以以监听模式启动 ofbiz, ofbiz 启动后,运行 debug, 就可以对所选的 java 类进行远程断点调试,在调试当中,如果想要改代码,可以暂时不用重新编译,用 debug execute 执行一下,可以欺骗当前运行,起到了不重启即可看到更新的效果。

分享到:
评论
1 楼 桦树雨夏 2010-02-07  
不错,支持

相关推荐

    eclipse如何配置ofbiz下的debug

    4. **Port**: OFBiz调试端口,默认是8000,但根据实际部署可能有所不同,需要查阅OFBiz的配置文件或日志确定。 5. **Source Lookup**: 确保已添加OFBiz项目的源代码路径,这样在调试时可以查看源代码。 配置完毕后...

    ofbiz学习笔记(自学整理)

    在学习Ofbiz的过程中,你可能会遇到的问题可能包括:理解和配置Ofbiz的复杂组件结构,编写和调试服务,以及处理与数据库交互时的实体问题。解决这些问题通常需要查阅Ofbiz的官方文档、社区论坛或在线教程。 最后,...

    ofbiz api开发文档

    - **异常处理**:熟悉OFBiz可能抛出的异常类型,以便进行错误处理和调试。 - **日志记录**:合理使用日志记录,有助于追踪问题和优化性能。 - **最佳实践**:遵循OFBiz社区推荐的最佳实践,如避免直接修改数据库...

    Apache OFBiz Cookbook

    - **监控与日志记录**:介绍如何设置和查看系统日志,以便于调试和问题追踪。 - **性能调优**:给出一系列技巧来优化系统的运行效率,减少资源消耗。 - **备份与恢复**:解释备份策略的重要性,并演示如何实施...

    OFBIZ开发指南 英文2

    对于扩展OFBIZ,你将学习到如何创建新的模块,编写定制的服务,以及如何部署和调试你的应用。 最后,你还将接触到OFBIZ的测试框架,了解如何编写单元测试和集成测试,确保代码的质量和系统的稳定性。 总之,...

    OFBIZ快速入门OFBIZ快速入门

    要深入理解和开发OFBiz,你需要了解其组件模型、服务定义、XML配置文件的用途(如`build.xml`、`component.xml`)、JSP和Freemarker模板语言的使用,以及如何调试和部署自定义组件。 总之,OFBiz作为一个强大的开源...

    ofbiz开发入门总结

    4. 测试与调试:Ofbiz提供了一套完善的测试框架,包括单元测试和集成测试。你可以编写JUnit测试用例,确保你的代码正常工作。 五、进阶学习资源 Ofbiz社区提供了大量的文档和教程,包括官方的用户指南、开发者手册...

    ofbiz中文技术文档

    9. **调试与性能优化**:如何调试Ofbiz应用,以及如何进行性能监控和优化,也是文档中不可或缺的部分。 10. **社区与支持**:介绍Ofbiz和Opentaps的社区资源,如邮件列表、论坛和在线文档,以便用户寻求帮助和参与...

    Ofbiz16.11.05运行及开发环境搭建等

    接着,运行`gradlew cleanAll`清理旧的构建文件,`gradlew loadDefault`加载默认数据到数据库,最后,你可以通过`gradlew ofbizDebug`启动调试模式的OFBiz服务器。如果不需要调试,可以使用`gradlew ofbiz`命令。 ...

    Ofbiz-16-全量数据库873张表.rar

    对于初学者,阅读`介绍.txt`文件会是很好的起点,它可能提供了关于如何使用这些脚本以及Ofbiz项目的基本信息。了解Ofbiz的数据模型有助于深入理解其工作原理,从而更好地进行定制开发和集成。 6. **注意事项** 在...

    ofbiz开发文档

    6. **调试与测试**:指导如何使用调试工具进行问题定位,以及编写和执行单元测试,确保代码质量。 7. **案例分析**:提供一些实际应用场景,通过实例演示如何使用OFBiz解决特定的业务问题。 总之,"ofbiz开发文档...

    Ofbiz技术文档

    4. **Cookbook特性**:“Apache OFBiz Cookbook Sep 2010.pdf”很可能包含了一系列实战案例和最佳实践,帮助开发者解决常见问题,比如如何添加新功能、如何调试错误、优化性能等。书中的示例代码和解释将为实际项目...

    Ofbiz数据模型查询手册

    这将帮助开发者更有效地调试和扩展系统,同时也会介绍一些常用的开发工具和技巧,如IDE集成、版本控制和构建工具的使用。 此外,手册也可能包含实战案例,演示如何根据实际需求进行数据查询和分析。这些案例可能会...

    OFBiz-alipay 配置文档

    7. **调试和测试** 在生产环境部署前,务必进行充分的测试。可以使用支付宝提供的沙箱环境模拟真实交易,测试支付流程的每个环节,包括支付发起、支付成功、支付失败等情况的处理。 8. **安全注意事项** 在整个...

    OFBiz教程_-_初学者的开发指南

    9. **调试技巧**:学习有效的调试方法,以便更快地定位和解决问题。 #### 四、重要提示 - **版本兼容性**:本教程建议使用最新的SVN版本进行学习,因为它可能不适用于较早的版本。 - **参考资料**:建议参考OFBiz...

    OFBiz Framework Quick Reference Book

    ### OFBiz Framework Quick Reference Book (版本 1.5.1) #### OFBiz 开发流程概述 本参考手册为 OFBiz 开发者提供了快速入门指南,适用于 Apache OFBiz 1.5.1 版本。OFBiz 是一个开源的企业级电子商务框架,支持...

    ofbiz迷你语言

    通过XML定义,开发者可以清晰地看到数据处理的步骤,便于调试和重构。同时,这种方式也使得业务规则的修改变得更为直观,只需修改相应的XML配置,而无需改动大量的Java代码。 总之,`simple-map-processor`和`...

    OFBIZ开发指南 英文

    3. **调试和测试**:OFBIZ提供了一套完整的测试框架,包括单元测试、服务测试和集成测试。开发者应熟练掌握这些工具,确保代码的质量和稳定性。 4. **国际化与多语言支持**:OFBIZ支持多语言,开发者需要了解如何...

    ofbiz学习资料

    - **Ofbiz的测试与调试**:学习如何编写单元测试,使用Ofbiz提供的调试工具进行问题排查。 通过深入学习上述知识点,并结合提供的学习资料,你将能够逐步掌握Ofbiz的开发技能,无论是进行项目开发还是进行系统集成...

Global site tag (gtag.js) - Google Analytics