`
xuhuankeven
  • 浏览: 36190 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论
阅读更多
最近在项目中碰到了不少眼生的错误、异常,由于赶工未作详细记录。现想起来是一笔无形的损失。。因今天在家闲来无事,特开此头,希望把以后遇见的问题做一个记录,以供他日、他人查询。
记录模板:
日期:
配置环境:
异常信息:
解决方案:
=========================================================================
日期:2010-06-17
配置环境:Seam2.0+Spring2+jbpm4+Tomcat6.0
异常信息:null ,空值错误。因为项目中需要在流程节点中进行业务处理,但在处理过程中需要进行对数据库的插入与查询等操作,因而需要公司项目中封装的一个XXDao的工具类。但实验了四种方式依旧在节点处理过程中取不到XXDao,一直报空值错误。
1:刚开始我们用注解,因为考虑到整个项目是在Seam大框架下,而Seam的上下文范围很大,jbpm又是集成到项目中的,感觉行得通,但失败了。老大提示Jbpm的流程处理过程脱离了Seam上下文,不能在custom节点处理类中进行注解(老实说,现在还是不明白:jbpm的运行期依旧是在Seam框架之下。。。。)。
2:于是转而投向流程变量,相通过吧XXDao的实例放入流程变量,再在custom节点处理类 中取出来使用,但依旧为成功。
3:想到Seam的注解是在使用时才实例化,创建对象,既然第一种方式不成功,第二种方式失败也是必然的。于是蒙头懵脑地采用Java最原始的方式new出实例,但依旧不成功。后来经过老大指点才发现XXDao中封装了一个Seam的组件,本身这个组件是依赖Seam注解的,因而XXDao不能new。
4:本已绝望,准备采用手写JDBC的方式来实现了,但老大又提出了一个方案,使用Spring来想类中注入需要的Seam组件XXDao。通过在spring-bean.xml配置<seam:instance name="XXDao..">但最终因为下班,未作深入实验。回来查阅相关资料才发现Seam与Spring的集成又是一片新天地。。。。值得研究。。
解决方案:第二天老大提示使用第二种方式,即通过流程变量传递XXDao对象,再在类中取出来使用,是可以实现的。
结果我在我的机子上实验,一切正常,在另外一台机子上也能使用,唯独上次那台依旧保留着他时好时坏的风格。。。。很是恼人。。。
=========================================================================
日期:2010-06-18
配置环境:Seam2.0+Spring2+jbpm4+Tomcat6.0
异常信息:couldn't deserialize object,启动流程后吧一个对象放入流程变量,在流程执行过程中正常,但是在custom节点处理时,从流程中取出流程变量时报不能反序列化object对象,思来想去找不出原由,而且普通的String,Long等类型都可以正常传递,流程变量中传入的对象都是实现了序列化的。最终在不同机子上实验时各有失败与成功。在网上搜索,似乎碰到类似问题的很少。只是在贩卖你的论坛  http://old.family168.com/bbs/dv_rss.asp?s=xhtml&boardid=6&id=1314上碰到一个相似帖子,跟帖的也只是说这是jbpm4的一个bug,并未贴出解决方案。在jboss官网 http://community.jboss.org/thread/119969 也有一张雷同帖子,大牛们也只是做了少许 理论上的解释,看上去很懵(本身英文不是很好)。
解决方案:暂时也就只能归结于jbpm4的bug了。因为只有一台机子出现这种异常,似乎这么归结有点欠妥。。。那就是RP问题吧。。。。。。
=========================================================================
日期:2010-06-25
配置环境:Seam2.0+Spring2+jbpm4+Tomcat6.0+mysql
异常信息:duplicate entry '22' for key 1,一开始就报已经存在值22,因为是在jbpm的表里面,所以首先想到的是jbpm的相关问题。翻来覆去把jbpm的表结构研究了一番,发现jbpm保存流程实例的时候是先向jbpm4_execution里面插入数据,又同时向jbpm4_hist_proinst和jbpm4_hist_actinst插入数据,同时开启流程时又向jbpm4_hist_task历史任务表中插入数据,表jbpm4_hsit_proinst和jbpm4_hist_actinst中插入的数据一般情况下不会删除。对于某一流程实例的不同状态(比如活动状态---active和结束状态---ended)只是用字段进行标示,而jbpm4_execution中的数据则是在流程实例执行完毕后删除,而jbpm4_execution表中的主键又是自增长的。就算是这样但也不应该出现重复值呀。中途忽略了一个细节,出现这种情况的很多都是在数据库重启后出现的。为什么是在数据库重启后呢。经过查证资料才发现这是mysql的一个bug。由于版本不同,有的版本在mysql数据库重启时相应表中的自增长字段并没有保存到磁盘中去,因而重启后mysql的一种解决方案是重新查找出相应表中自增长字段最大值,然后再以此自增。回到刚才的三张表中,很显然这样如果我处理完成最后一个流程重启数据库后,表jbpm4_execution中插入数据时,历史表也同时插入,然而历史表中依然保持着之前的处理流程,因为表jbpm4_hist_proinst和jbpm4_hist_actinst保存着jbpm4_execution的外键引用,这样再插入数据时肯定会出现重复数据。
解决方案:找到了 原因首先想要的是得打解决方法:
1: 在网上查找了一下,基本上都建议单建一张表用来保存相应表中当前的自增长值。用触发器实现,但老大考虑到这种方式在项目中的改动比较大,所以放弃了。
2:想了想,如果表jbpm4_execution表在流程处理完成后不删除相应数据,也就不会存在这种情况了。。但因为查找不到相应的配置,这样改动的话,必然需要修改jbpm的源码,出于对这个开源框架的理解尚浅,怕驾驭不到框架的改动,因而也放弃了。
3:还有一种方案就是修改mysql数据库的引擎模式。像前面说到的,因为版本差异mysql的默认数据库引擎也不同。项目中用到的是5.0版本恰好是innoDB模式引擎(具体名称忘了,下次补上),其自增长值并未保存与磁盘,而是放在内存中。如果转为MyISAM模式引擎,则可解决此问题。但老总的一句话又让我们放弃了这个解决方案:MyISAM模式引擎对事务的支持很不完美。
4:最终依旧未解决
=========================================================================
分享到:
评论

相关推荐

    App_Code_c#错误记录_

    本文将深入探讨“App_Code_c#错误记录”这一主题,讲解如何使用C#在ASP.NET环境中实现有效的错误记录。 首先,让我们关注核心文件`SaveError.cs`。这个文件通常包含了自定义的错误处理逻辑,它可能包含了一个类或者...

    Opnet14.0使用错误记录

    Opnet14.0 使用错误记录 Opnet14.0 使用错误记录是指在使用 Opnet14.0 软件时可能出现的一些常见错误记录,包括 ODB 使用错误、Repository 模式选用问题、使用外部文件 xx.ex.c 或者 xx.ex.cpp 问题、与 VC++6.0 ...

    计算机C#代码错误记录日志

    计算机C#代码错误记录日志

    错误记录模组和处理常式( Error Logging Modules And Handlers,ELMAH)

    我们全文将探讨的错误记录模组和处理常式( E rror L ogging M odules A nd H andlers,ELMAH),是由合着人Atif Aziz ( http://www.raboof.com/ )写成,当中说明一种简单的方法,在ASP.NET Web 应用程式增加错误记录...

    net系统错误记录工具 Elmah

    是一款ASP.NET下的系统错误记录管理工具,它可以非常方便的把“黄屏”错误记录到XML,MS SQLServer,SQLite,MySql等文件中,甚至它还可以发送邮件。 这里我写了简单的配置过程:...

    MiracleYoung#You-are-Pythonista#大厂机试_18_简单错误记录2

    大厂机试_18_简单错误记录简单错误记录if record not in error.keys():

    mysql-5.6.15-win32安装及错误记录.pdf

    mysql-5.6.15-win32安装及错误记录.pdf

    mysql-5.6.15-win32安装及错误记录.docx

    mysql-5.6.15-win32安装及错误记录.docx

    bugrecord:用于系统错误记录

    在IT行业中,错误记录是软件开发过程中的重要环节,它能帮助开发者追踪并解决系统中出现的问题。"bugrecord"项目显然就是一个专为系统错误记录设计的工具或框架,其目的是为了有效地管理和分析本地更改引发的错误。...

    Elmah, 错误记录 ASP.NET的模块&处理程序.zip

    Elmah, 错误记录 ASP.NET的模块&处理程序 ELMAH自述文件请在使用这里ELMAH版本之前仔细阅读这里文档,因为它包含重要信息。对于对等帮助和支持,请使用 ELMAH讨论组。 在项目站点上报告 Bug 和问题到问题跟踪程序 。...

    ASP.NET中记录错误日志方法

    但需要注意的是,这些信息在发布版本中默认会被关闭,不适合用于生产环境的错误记录。 2. **EventLog**: .NET Framework提供了一个EventLog类,可以向Windows事件查看器写入日志条目。通过创建新的事件源和使用...

    Go的错误记录器-Golang开发

    Go Thoth的错误记录仪什么是Thoth? 在埃及神话中,透特是埃及宜必思领导的知识,魔法和智慧之神。 在这种情况下,Thoth是golang的错误记录器。 它有助于将错误记录到日志文件中,因此您可以回头查找生产中出现问题...

    Global.asax的Application_Error实现错误记录/错误日志的代码

    本文重点介绍如何通过Global.asax中的Application_Error方法来实现错误记录和错误日志的功能。 在***应用程序中,当发生未处理的错误时,会触发Application_Error事件。开发者可以通过重写Global.asax文件中的...

    asp用户错误记录与分析系统(Ajax)

    简介 你的网站成熟吗?如果你回答是,是否考虑过你的网站具备了对用户操作人性化的提示?作为管理员的你,是否了解用户...Ø 友好显示用户操作错误信息 Ø 供网站管理员分析与采集用户操作习惯 Ø Web2.0的学习与理解

    c# winform 辅助测试工具,方便记录错误信息,方便查看调试错误,用INI存储,可脱离数据库

    在软件测试中,错误记录和调试是至关重要的环节。此工具通过提供一个用户友好的界面,使得测试人员可以方便地捕获、记录和追踪软件运行过程中的错误或异常情况。这些信息包括但不限于错误类型、发生时间、错误堆栈...

    elmah.io:ELMAH错误记录器,用于将错误发送到elmah.io

    4. **启用错误记录**:在Global.asax.cs文件中,调用`ErrorLogRegistry.RegisterDefaultLogger()`方法,或者在Web.config中配置错误日志提供者。 5. **自定义设置**:可以根据需求调整错误过滤、错误通知等设置,...

    C#winform 全局错误捕捉 可以让错误跳过去继续执行住程序

    3. 自定义错误处理框架:为了更精细地控制错误处理,你可以创建一个自定义的错误处理框架,该框架可以包含异常分类、错误记录、通知用户、邮件报警等功能。这样,你可以根据异常类型来决定是否允许程序继续执行,...

    dropwizard-raven:Dropwizard集成,用于将错误记录到Sentry

    Dropwizard乌鸦 Dropwizard集成,用于将错误记录到。用法Dropwizard Raven提供了一个AppenderFactory ,它会自动在Dropwizard中注册,并将错误发送给Sentry。记录启动错误为了记录启动错误(即在正确初始化...

    工作失误记录表模板.XLS

    工作失误记录表模板.XLS

    logger:Elixir 错误记录器开发

    这就是为什么这个项目的重点是错误处理程序而不是错误记录器本身。 默认情况下, Logger将运行在 OTP 的error_logger之上,我们将包含一个 API,该 API 主要包装error_logger 。 安装 将:logger作为依赖项添加到...

Global site tag (gtag.js) - Google Analytics