[Building Sakai] Gradebook bug reports after MySQL upgrade

Bryan Bakotich bakotibj at plu.edu
Tue May 4 09:05:17 PDT 2010


Stephen,

Your interpretation was right on. I have been able to successfully reproduce
this bug multiple times now by simply clicking the save button twice before
the form is done submitting. I will update the JIRA with this information
and try to give the code a more in depth look later this week. Apparently
I'm just more patient than our faculty when it comes to submitting forms!

-Bryan

On Tue, May 4, 2010 at 12:41 AM, Stephen Marquard <
stephen.marquard at uct.ac.za> wrote:

> This has been a persistent low-frequency bug in our environment too. We'd
> love it if someone would fix it.
>
> My interpretation has always been that it came from duplicate form
> submissions (e.g. clicking twice on the form button).
>
> Regards
> Stephen
>
> >>> Bryan Bakotich <bakotibj at plu.edu> 5/4/2010 12:20 AM >>>
> Hi all,
>
> We recently upgraded from MySQL 4.1 to 5.1 and ever since then we receive a
> couple of the same bugs every day from various users trying to save grades
> in the gradebook (see the stack trace below). It looks like it is related
> to
> this jira, http://jira.sakaiproject.org/browse/SAK-10847 , which we saw a
> much less frequently before the MySQL upgrade.
>
> In each case when I talked to users that ran into the bug they said they
> were entering grades for a gradebook item and saw this error upon trying to
> submit the entered scores. They usually run into this bug once or twice and
> then the submission finally goes through without generating the bug report.
> Because of this I have not yet been able to reproduce the bug. Does anyone
> have any ideas why this is happening? I am a little lost and could
> definitely use a push in the right direction. Thanks.
>
> -Bryan
>
> org.sakaiproject.portal.api.
> PortalHandlerException: org.sakaiproject.tool.api.ToolException: Exception
> while invoking expression #{assignmentDetailsBean.processUpdateScores}
>   at
>
> org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:70)
> caused by: org.sakaiproject.tool.api.ToolException: Exception while
> invoking
> expression #{assignmentDetailsBean.processUpdateScores}
>   at
>
> org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1216)
> caused by: javax.servlet.ServletException: Exception while invoking
> expression #{assignmentDetailsBean.processUpdateScores}
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
> caused by: javax.faces.el.EvaluationException: Exception while invoking
> expression #{assignmentDetailsBean.processUpdateScores}
>   at javax.faces.component.UICommand.broadcast(UICommand.java:89)
> caused by: org.springframework.dao.DataIntegrityViolationException: could
> not insert: [org.sakaiproject.tool.gradebook.AssignmentGradeRecord]; nested
> exception is org.hibernate.exception.ConstraintViolationException: could
> not
> insert: [org.sakaiproject.tool.gradebook.AssignmentGradeRecord]
>   at
>
> org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
> caused by: org.hibernate.exception.ConstraintViolationException: could not
> insert: [org.sakaiproject.tool.gradebook.AssignmentGradeRecord]
>   at
>
> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
> caused by:
> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:
> Duplicate entry '21736-0474a9e1-2a6c-4546-a3b9-ea798a3ad3e2' for key
> 'GRADABLE_OBJECT_ID'
>   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
>   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
>   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
>   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
>   at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
>   at
>
> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
>   at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
>   at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
>   at
> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
>   at
>
> org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
>   at
>
> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
>   at
>
> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
>   at
>
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
>   at
>
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
>   at
>
> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
>   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
>   at
>
> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
>   at
>
> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
>   at
>
> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
>   at
>
> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
>   at
>
> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
>   at
>
> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
>   at
>
> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>   at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
>   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
>   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
>   at sun.reflect.GeneratedMethodAccessor2246.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(HibernateTemplate.java:1202)
>   at $Proxy23.saveOrUpdate(null:-1)
>   at
>
> org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl$7.doInHibernate(GradebookManagerHibernateImpl.java:706)
>   at
>
> org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
>   at
>
> org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:338)
>   at
>
> org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecords(GradebookManagerHibernateImpl.java:735)
>   at
>
> org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradeRecords(GradebookManagerHibernateImpl.java:2101)
>   at
>
> org.sakaiproject.tool.gradebook.business.impl.GradebookManagerHibernateImpl.updateAssignmentGradesAndComments(GradebookManagerHibernateImpl.java:917)
>   at sun.reflect.GeneratedMethodAccessor5515.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:296)
>   at
>
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
>   at
>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
>   at
>
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
>   at
>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
>   at
>
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>   at $Proxy125.updateAssignmentGradesAndComments(null:-1)
>   at
>
> org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.saveScores(AssignmentDetailsBean.java:463)
>   at
>
> org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.processUpdateScores(AssignmentDetailsBean.java:454)
>   at sun.reflect.GeneratedMethodAccessor18718.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:132)
>   at javax.faces.component.UICommand.broadcast(UICommand.java:89)
>   at
> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
>   at
> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
>   at
>
> org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
>   at
>
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
>   at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
>   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:565)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at
> org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:145)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at
>
> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
>   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:647)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
>   at
>
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
>   at
>
> org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:479)
>   at
>
> org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1216)
>   at
>
> org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:188)
>   at
>
> org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:93)
>   at
>
> org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:70)
>   at
>
> org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1059)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:616)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>   at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>   at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>   at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>   at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>   at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>   at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>   at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>   at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>   at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>   at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>   at
>
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>   at
>
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>   at
>
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>   at java.lang.Thread.run(Thread.java:595)
>
>
> --
> Bryan Bakotich
> Open Source Implementation Specialist
> Digital Media Center, Information & Technology Services
> Pacific Lutheran University
> Tacoma, WA 98447-0013
> Phone: 253-536-5021
>
>
>
>
> ______________________________________________________________________________________________
>
> UNIVERSITY OF CAPE TOWN
>
> This e-mail is subject to the UCT ICT policies and e-mail disclaimer
> published on our website at
> http://www.uct.ac.za/about/policies/emaildisclaimer/ or obtainable from
> +27 21 650 4500. This e-mail is intended only for the person(s) to whom it
> is addressed. If the e-mail has reached you in error, please notify the
> author. If you are not the intended recipient of the e-mail you may not use,
> disclose, copy, redirect or print the content. If this e-mail is not related
> to the business of UCT it is sent by the sender in the sender's individual
> capacity.
>
>
> _____________________________________________________________________________________________________
>
>


-- 
Bryan Bakotich
Open Source Implementation Specialist
Digital Media Center, Information & Technology Services
Pacific Lutheran University
Tacoma, WA 98447-0013
Phone: 253-536-5021
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20100504/69042f41/attachment.html 


More information about the sakai-dev mailing list