Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
[SAK-6192] Hibernate-related exception Created: 03-Sep-2006 Status: Project: Component/s: Affects Version/s: Fix Version/s: Closed Sakai Gradebook 2.2.x Type: Reporter: Resolution: Labels: Remaining Estimate: Time Spent: Original Estimate: Environment: Bug Stephen Marquard Fixed None Not Specified Issue Links: Relate relates to Updated: 23-Oct-2008 Resolved: 25-Oct-2006 2.4.0 Priority: Assignee: Votes: Major Oliver Heyer 0 Not Specified Not Specified Linux, mysql SAK-3785 2 Methods needed in gradebook Closed Description Unknown user behaviour triggered this bug report: org.sakaiproject.tool.api.ToolException: Exception while invoking expression # {assignmentDetailsBean.processUpdateScores} at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247) caused by: javax.servlet.ServletException: Exception while invoking expression #{assignmentDetailsBean.proce at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) caused by: javax.faces.el.EvaluationException: Exception while invoking expression # {assignmentDetailsBean.processUpdateScores} at javax.faces.component.UICommand.broadcast(UICommand.java:86) caused by: org.springframework.dao.InvalidDataAccessApiUsageException: The given object has a null identifi org.sakaiproject.tool.gradebook.AssignmentGradeRecord; nested exception is org.hibernate.TransientObjectExc org.sakaiproject.tool.gradebook.AssignmentGradeRecord at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccesso caused by: org.hibernate.TransientObjectException: The given object has a null identifier: org.sakaiproject.tool.g at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener at org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:46) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventList at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventLis at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:559) at org.hibernate.impl.SessionImpl.update(SessionImpl.java:547) at org.hibernate.impl.SessionImpl.update(SessionImpl.java:539) 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:585) at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(Hibern at $Proxy1.update(null:-1) at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl$5.doInHibernate(Gradebook at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334) at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecor at sun.reflect.GeneratedMethodAccessor2586.invoke(null:-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocati at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176) at $Proxy57.updateAssignmentGradeRecords(null:-1) at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.saveScores(AssignmentDetailsBean.java:212) at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.processUpdateScores(AssignmentDetailsBean.jav at sun.reflect.GeneratedMethodAccessor2585.invoke(null:-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129) at javax.faces.component.UICommand.broadcast(UICommand.java:86) at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164) at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:501) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:139) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221) at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:339) at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247) at org.sakaiproject.portal.charon.CharonPortal.doTool(CharonPortal.java:1199) at org.sakaiproject.portal.charon.CharonPortal.doPost(CharonPortal.java:867) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:532) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595) Comments Comment by Stephen Marquard [ 16-Sep-2006 ] Another case, looks identical to the one above: org.sakaiproject.tool.api.ToolException: Exception while invoking expression # {assignmentDetailsBean.processUpdateScores} at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247) caused by: javax.servlet.ServletException: Exception while invoking expression #{assignmentDetailsBean.proce at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) caused by: javax.faces.el.EvaluationException: Exception while invoking expression # {assignmentDetailsBean.processUpdateScores} at javax.faces.component.UICommand.broadcast(UICommand.java:86) caused by: org.springframework.dao.InvalidDataAccessApiUsageException: The given object has a null identifi org.sakaiproject.tool.gradebook.AssignmentGradeRecord; nested exception is org.hibernate.TransientObjectExc org.sakaiproject.tool.gradebook.AssignmentGradeRecord at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccesso caused by: org.hibernate.TransientObjectException: The given object has a null identifier: org.sakaiproject.tool.g at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener at org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:46) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventList at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventLis at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:559) at org.hibernate.impl.SessionImpl.update(SessionImpl.java:547) at org.hibernate.impl.SessionImpl.update(SessionImpl.java:539) at sun.reflect.GeneratedMethodAccessor3603.invoke(null:-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(Hibern at $Proxy1.update(null:-1) at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl$5.doInHibernate(Gradebook at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334) at org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecor 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:585) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocati at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176) at $Proxy57.updateAssignmentGradeRecords(null:-1) at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.saveScores(AssignmentDetailsBean.java:212) at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.processUpdateScores(AssignmentDetailsBean.jav 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:585) at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129) at javax.faces.component.UICommand.broadcast(UICommand.java:86) at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164) at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:501) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:139) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221) at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:339) at org.sakaiproject.portal.charon.CharonPortal.forwardTool(CharonPortal.java:1247) at org.sakaiproject.portal.charon.CharonPortal.doTool(CharonPortal.java:1199) at org.sakaiproject.portal.charon.CharonPortal.doPost(CharonPortal.java:867) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:532) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595) Comment by Owen McGrath [ 16-Sep-2006 ] Stephen, do you happen to know anything more about the site involved? In particular, any assignments coming f Comment by Stephen Marquard [ 17-Sep-2006 ] This user is in two sites, one as a student, the other as a Tutor (TA). In both sites, the Gradebook only has interna or Assignments. Comment by Owen McGrath [ 19-Sep-2006 ] At first blush, Mary Glackin's report on Sakai Dev this morning looks quite similar. I've assigned this to Louis. Comment by Louis Majanja [ 19-Sep-2006 ] hey Stephen, is this something that is happening regularly ? or did this happen once and you were unable to repli Comment by Stephen Marquard [ 19-Sep-2006 ] It's happened twice (that I noticed). We didn't get user comments or a specific complaint about it, so we're not su specifically to see if it can be replicated or not (not knowing what to try). Comment by Louis Majanja [ 19-Sep-2006 ] So is the use experiencing the problem in both sites - as a student and also separately as a TA. . I s this the same happening to other users too? Comment by Owen McGrath [ 19-Sep-2006 ] Need to understand if these have any relation to each other. Comment by Owen McGrath [ 19-Sep-2006 ] Note: need to understand whether these are related. Comment by Stephen Marquard [ 19-Sep-2006 ] My guess is that the user is experiencing it in the site in which he/she is a TA. I don't know if the two reports are we have the original around anymore. Comment by Ray Davis [ 25-Oct-2006 ] To be more exact about the version of the Gradebook that's involved here, the line numbers in the error log matc files checked in as revisions 14109 and 9716. Comment by Ray Davis [ 25-Oct-2006 ] Although without further information we can't be sure that this is the cause of the problem, after looking at the c the folllowing scenario: 1) Start with an unscored student. Two graders open the gradebook for the site and go to the Assignment Details 2) Grader 1 gives the previously unscored student a score and saves changes. 3) Without refreshing the screen, Grader 2 gives the same student a score and tries to save changes. Stephen, if your logging is set at the INFO level, could you see if there are two matching "INFO AssignmentDet in front of the stack trace? That would be partial confirmation that this is the problem. The bug I see in the code, by the way, is that we decide whether this is a new data object or not based on reading logic, but then the actual update is done with the object passed in from the UI. Bad logic, since we don't know ho If the UI did its own query before any record existed, then we'll be trying to update the database using a object th optimistic locking failure because there's no conflict between the object versions: one of the objects doesn't have Comment by Stephen Marquard [ 25-Oct-2006 ] Sorry, I don't think we have those logs any more. We don't generally keep our tomcat logs around for that long. Comment by Ray Davis [ 25-Oct-2006 ] I was also able to trigger a similar problem when two instructors both tried to give a course grade to a previously I added code to the assignment scoring and course grading methods to throw the usual optimistic locking failure Fix checked in as revision 17431. Comment by Megan May [ 08-Feb-2007 ] Updating fix version from nightly2/trunk to 2.4.0.001 in prep for first QA tag (Prelim testing pre-code freeze) Comment by Filter Maintainer [ 10-Sep-2007 ] [Bulk Edit] This issue is Resolved for 2.4.0, however, there were not sufficient resources available for it to be Q reopened we are assuming it was completely addressed, and are Closing it. Please feel free to reopen this issue if this specific issue's fix, otherwise, please open a new issue. Generated at Sun May 14 23:01:47 CDT 2017 using JIRA 7.0.10#70120sha1:37e3d7a6fc4d580639533e7f7c232c925e554a6a.