关于OFBiz调试

简介: 1、如何调试OFBiz 首 先你需要学习和熟悉OFBiz的教程与工具指导文档。指导文档特别重要,因为很多子主题内容不是排列最前的内容却可能导致问题的发生。你应该熟悉类似于 Freemaker,beanshell,XML这些技术。

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中增加日志信息,使用指令并输入你的值,比如在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 执行一下,可以欺骗当前运行,起到了不重启即可看到更新的效果。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
【每日教程】用中继器做一个三级菜单(含标签)
【每日教程】用中继器做一个三级菜单(含标签)
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
2088 0
|
SQL Oracle 关系型数据库
浅谈mysql数据库迁移至国产化达梦数据库
项目要求mysql数据库数据需要转到达梦数据库,对于达梦数据库的了解尚且不多,一开始使用手动转SQL脚本,效率极低,非常容易出错。达梦数据库的资料实在有限,经过后期研究,发现原来DM已经有自己的数据迁移工具,使用之后非常方便。对mysql数据库转达梦数据库的操作流程做一个简要分享。
7542 0
浅谈mysql数据库迁移至国产化达梦数据库
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
742 6
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
927 6
|
存储 安全 Java
基于springboot的足球俱乐部管理系统的设计与实现
基于springboot的足球俱乐部管理系统的设计与实现
Axure设计之多级菜单导航教程(中继器)
在数字化时代,优化产品设计,提升用户界面交互,是产品设计着重考虑的点。针对传统菜单导航复杂繁琐的问题,本设计提出了一套灵活的菜单导航方案,结合中继器与动态面板,实现一键搜索、菜单收藏、多级菜单导航、点击展开收缩等交互功能,旨在提升领导满意度,增强产品设计体验。
962 2
|
Web App开发 数据可视化 前端开发
Pixi入门第一章:绘制一个小精灵
这篇文章是关于Pixi.js的入门教程第一部分,指导读者如何创建并显示一个基本的2D精灵,适用于开始学习Pixi.js进行2D图形开发的初学者。
518 0
Pixi入门第一章:绘制一个小精灵
|
存储 Java 数据库
Spring Boot 优雅实现多租户架构
本文详细介绍如何使用Spring Boot和Spring Cloud实现多租户架构。多租户架构允许多个租户共用一个应用,各自拥有独立资源和数据。其优势包括满足个性化需求、降低成本、复用代码以及增强可扩展性。文中探讨了架构选型、数据库设计、应用部署及租户管理等内容,并提供了具体实现步骤和技术细节。适用于SaaS应用和多租户云服务等场景。
|
存储 编解码 弹性计算
租用2核4G、4核8G、8核16G配置阿里云服务器可选实例规格及价格参考
在租用阿里云服务器时,一般计算型实例规格的云服务器处理器与内存配比为1:2,而2核4G、4核8G、8核16G配置就是用户选择较多的配置,这些配置的云服务器一般可用于网站应用、批量计算、视频编码等各种类型和规模的企业级应用,目前在阿里云的活动中经济型e、通用算力型u1、计算型c7、计算型c8y、计算型c7a等实例2核4G、4核8G、8核16G配置有优惠,本文为大家介绍这些配置在阿里云目前的活动中可选的实例规格及具体价格和收费标准情况,以供参考。
租用2核4G、4核8G、8核16G配置阿里云服务器可选实例规格及价格参考

热门文章

最新文章