Uploaded image for project: 'camunda BPM'
  1. camunda BPM
  2. CAM-1688

I cannot click twice on the "completeTask" button in Tasklist

XMLWordPrintable

      Usability problem in Tasklist: If the user clicks on the "complete task" button, the button is not deactivated while the request is being processed. This is not optimal since the user can click on the button twice (What's worse: if he does click on the button twice the process instance may be put in an inconsistent state, see known bug CAM-1574[1] )

      AT:

      • deactivate complete task button while request is being processed.

      Original description by ghollins

      See: https://groups.google.com/forum/#!topic/camunda-bpm-users/gpglpg3ZcJc

      I have experienced problems with database transactions when I double (or triple, etc..) click on the "Complete Task" (complete User task) button in the Tasklist web app.

      I think that only one click should be allowed, and a transparent overlay should be applied on mouse click. Or, a spinner should replace the button, etc...

      If you click many times in a row on the button, it can cause your process to get into an unrecoverable state, and an error message similar to:

      "Server Error: Cannot submit task form a5e48553-77c0-11e3-85ff-10ddb1f141ab: ExecutionEntity[7b06dbbb-77c0-11e3-85ff-10ddb1f141ab] was updated by another transaction concurrently"

      will be displayed.

      What I mean by "unrecoverable" is that you can't cancel the process instance after the multiple clicks. An attempt to cancel will result in a UI error:
      "Failed: The cancellation of the process instance failed."

      and backend error:

      Jan 7, 2014 9:30:17 AM org.camunda.bpm.engine.impl.interceptor.CommandContext close
      SEVERE: Error while closing command context
      org.apache.ibatis.exceptions.PersistenceException:

          1. Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`camunda`.`act_ru_variable`, CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`))
          2. The error may involve org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.deleteExecution-Inline
          3. The error occurred while setting parameters
          4. SQL: delete from ACT_RU_EXECUTION where ID_ = ? and REV_ = ?
          5. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`camunda`.`act_ru_variable`, CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`))
            at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:147)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.delete(DefaultSqlSession.java:158)
            at org.camunda.bpm.engine.impl.db.DbSqlSession$DeletePersistentObjectOperation.execute(DbSqlSession.java:264)
            at org.camunda.bpm.engine.impl.db.DbSqlSession.flushDeletes(DbSqlSession.java:735)
            at org.camunda.bpm.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:502)
            at org.camunda.bpm.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:212)
            at org.camunda.bpm.engine.impl.interceptor.CommandContext.close(CommandContext.java:155)
            at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49)
            at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32)
            at org.camunda.bpm.engine.impl.RuntimeServiceImpl.deleteProcessInstance(RuntimeServiceImpl.java:90)
            at org.camunda.bpm.engine.rest.sub.runtime.impl.ProcessInstanceResourceImpl.deleteProcessInstance(ProcessInstanceResourceImpl.java:56)
            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 org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
            at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
            at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
            at org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:159)
            at org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:107)
            at org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:154)
            at org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:92)
            at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
            at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
            at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
            at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
            at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
            at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
            at org.camunda.bpm.engine.rest.filter.CacheControlFilter.doFilter(CacheControlFilter.java:47)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
            at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilterSecure(SecurityFilter.java:67)
            at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilter(SecurityFilter.java:51)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
            at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:59)
            at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:56)
            at org.camunda.bpm.webapp.impl.security.SecurityActions.runWithAuthentications(SecurityActions.java:38)
            at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
            at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
            at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
            at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
            at java.lang.Thread.run(Thread.java:695)
            Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`camunda`.`act_ru_variable`, CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`))
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
            at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
            at com.mysql.jdbc.Util.getInstance(Util.java:386)
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
            at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
            at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
            at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
            at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
            at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
            at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:41)
            at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:66)
            at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:45)
            at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:108)
            at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:145)
            ... 57 more

      [1]: https://app.camunda.com/jira/browse/CAM-1574

        This is the controller panel for Smart Panels app

              michael.schoettes Michael Schoettes
              ghollins Galen Hollins
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: