TROUBLESHOOTING: 行数据不一致异常[RowInconsistentException] JBO-25014
oracle.jbo.RowInconsistentException: JBO-25014: 其他用户已更改具有主键 oracle.jbo.Key[138 ] 的行。at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:1079)at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:553)at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:8259)at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5964)at oracle.jbo.server.EntityImpl.beforePost(EntityImpl.java:6484)at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:6665)at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3286)at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:3089)at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2093)at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2374)at hksar.dh.cims.cg.cim.view.bean.EncntrProblemsManageBean.commitProblems(EncntrProblemsManageBean.java:77)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at com.sun.el.parser.AstValue.invoke(Unknown Source)at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)at org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:53)at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcastToMethodBinding(UIXComponentBase.java:1256)at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:183)at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:788)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:306)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:186)at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111)at java.security.AccessController.doPrivileged(Native Method)at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413)at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161)at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
异常现象:
在ADF中新建或者更新数据的时候,进行连续的Commit操作,第一次成功,接着会出现JBO-25014异常。
异常原因:
在比较EO Cached Entity与数据库中的值的时候,出现不一致。也就是在ADF的Commit操作后,数据库中的数据被其他操作修改了,这种情况会出现在数据库端使用了Trigger的时候;另一种情况是,EO中的Attribute使用了用户自定义的domain-type,该类型的equals()方法返回false。
会报如下错误:
oracle.jbo.RowInconsistentException JBO-25014 其他用户已更改具有主键 XXX 的行
解决方案:
1,如果EO有Attribute使用了domain-type,检查equals()方法;
2,如果数据库端使用了trigger,修改EO的 Refresh after update 属性;
3,使用vo.executeQuery同步Model层与数据库中的数据。
--------------------------------------------------------------------------------------------------------------------------------------------
Add at 2011/10/3
如果以上的问题发生在trigger上,可以使用EO中的‘Change Indicator’属性来提高程序的效率。
参考:What is Change Indicator property
--------------------------------------------------------------------------------------------------------------------------------------------
Add at 2011/11/15
Steve Muench的#161 Smaple介绍了如何保证RowInconsistentException可以正确的抛出,避免非正确的逻辑出现。
Signal RowInconsistentException Correctly Across Activation/Passivation
oracle.jbo.RowInconsistentException: JBO-29114 ADFContext is not setup to process messages for this exception. Use the exception stack trace and error code to investigate the root cause of this exception. Root cause error code is JBO-25014at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:1079)at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:553)at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:8259)at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5964)at oracle.jbo.server.EntityImpl.beforePost(EntityImpl.java:6484)at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:6665)at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3286)at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:3089)at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2093)at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2374)at hksar.dh.cims.cg.cim.view.bean.EncntrProblemsManageBean.commitProblems(EncntrProblemsManageBean.java:77)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at com.sun.el.parser.AstValue.invoke(Unknown Source)at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)at org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:53)at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcastToMethodBinding(UIXComponentBase.java:1256)at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:183)at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:788)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:306)at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:186)at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111)at java.security.AccessController.doPrivileged(Native Method)at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413)at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161)at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)at weblogic.work.ExecuteThread.run(ExecuteThread.java:178) 转载于: http://blog.csdn.net/luyushuang/article/details/6826291
参考: http://radio-weblogs.com/0118231/stories/2004/03/24/whyDoIGetOraclejborowinconsistentexception.html
转载于:https://my.oschina.net/zhngjan/blog/351188
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
