`
gzspark
  • 浏览: 109695 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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。

本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处.
5
1
分享到:
评论

相关推荐

    ofbiz安装与配置

    Ofbiz 安装与配置指南 Ofbiz 是一个基于 Java 的开源企业级电子商务平台,提供了强大的电子商务解决方案。为了帮助初学者快速上手 Ofbiz,我们将详细介绍 Ofbiz 的安装与配置过程。 环境搭建 在开始安装 Ofbiz ...

    ofbiz电商框架hello与皮肤定制实例

    总的来说,通过"ofbiz电商框架hello与皮肤定制实例"的学习,开发者可以掌握OFBiz的基础知识,并具备创建自定义主题的能力。这将有助于提升电商平台用户体验,增强品牌识别度,并为后期的系统扩展打下坚实的基础。在...

    eclipse如何配置ofbiz下的debug

    在IT行业中,Eclipse是一款广泛使用的Java集成开发环境(IDE),而OFBiz是一个开源的企业级应用框架,主要用于构建电子商务和企业...同时,熟悉这样的远程调试技巧对于处理其他远程Java应用程序的调试问题同样适用。

    ofbiz学习笔记(自学整理)

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

    Ofbiz 数据库全模型

    Ofbiz,全称为The Open For Business Project,是一个开源的企业应用框架,主要由Apache软件基金会维护。这个项目旨在提供一套全面的、可扩展的企业级应用程序解决方案,涵盖了电子商务、供应链管理、客户关系管理等...

    Apache OFBiz Cookbook

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

    关于OFBIZ的资料

    通过深入探索OFBIZ_Demo,无论是初学者还是经验丰富的开发者,都可以进一步了解OfBiz的强大功能,掌握其核心概念和操作技巧,从而更好地利用这个平台来构建和管理企业的业务流程。记得定期检查Apache OfBiz的最新...

    ofbiz api开发文档

    OFBiz API 是OFBiz框架的核心组成部分,它提供了丰富的接口和方法,使得开发者能够轻松地与OFBiz的各个业务组件进行交互。API的设计遵循了面向服务架构(SOA),支持RESTful风格的Web服务,同时也提供传统的Java ...

    ofbiz10.04表结构

    这一系列可能涵盖了OFBiz的各个方面,从基础概念到高级开发技巧,旨在帮助开发者更深入地掌握OFBiz。 标签"OFBiz ofbiz ofb"进一步确认了讨论的主题,"ofbiz"和"ofb"是OFBiz的常见缩写形式。 提供的压缩包内的文件...

    Apache.OFBiz.Development

    1. OFBiz介绍与安装:OFBiz是一个开源的企业自动化软件套件,它提供了构建企业应用程序所需的各种功能,比如电子商务、订单处理等。文件中提到了2008年的版本,这意味着可能有较新的版本替代。安装OFBiz涉及到获取源...

    OFBIZ快速入门OFBIZ快速入门

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

    ofbiz开发入门总结

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

    ofbiz中文技术文档

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

    OFBIZ开发指南 英文2

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

    ofbiz 教程_配置ofbiz

    ofbiz的获取与部署,主要用到了gradle 和 eclipse,注意:cmd部署时,需要一个较好的网络环境以下载gradle

    ofbiz数据结构设计

    OFBiz的实体引擎负责处理与数据库交互的事务,包括数据的读取、创建、更新和删除。它基于Java Persistence API (JPA) 和 Hibernate,提供了一种灵活的方式来定义和操作实体。通过XML文件,开发者可以定义实体的属性...

    ofbiz开发手册

    OFBiz 开发手册 OFBiz 是一个基于 Java 的开源电商平台,旨在提供一个灵活、可扩展、可配置的电商解决方案。本文档将作为一个 OFBiz 的入门教材,主要介绍 OFBiz 的环境搭建、安装以及用一个简单的应用作为例子介绍...

    ofbiz开发者入门教程

    在本教程中,我们将深入探讨如何入门Apache Ofbiz的开发,这是一个开源的企业级应用框架,专为电子商务、供应链管理和企业资源规划等业务流程设计。Ofbiz提供了强大的组件化架构,使得开发者可以方便地构建和扩展...

    ofbiz git 服务搭建

    3. Mysql Navicate Premium:数据库管理和开发工具,用于与OFBiz交互。 4. Git:版本控制系统,用于跟踪和管理OFBiz源代码的变更。 Git的安装步骤如下: 1. 访问官方网站或通过搜索引擎找到msysGit的下载链接...

Global site tag (gtag.js) - Google Analytics