FundBO version_id being updated with each new loan leads to concurrent user
exceptions
--------------------------------------------------------------------------------------
Key: MIFOS-2903
URL: http://mifosforge.jira.com/browse/MIFOS-2903
Project: mifos
Issue Type: Bug
Components: Loan Account
Affects Versions: Release 1.5
Reporter: Sam Birney
Priority: Blocker
We upgraded to version 1.5 today. We had calls from several branches saying
that sometimes they see a red dot when submitting a newly entered loan for
approval, but that it was only happening sometimes. We found the following
stack trace in the error logs. We discovered that the FUND table is being
updated for each new loan account, resaving the fund with a new version_id
(after 28 loans were entered today the version_ids of the funds in the table
added up to 28) . This means that if two people enter loans at the same time
with the same fund then the one who submits last will see the error.
I replicated this on the test server ci.mifos.org:8085 --
1. open a client page in one browser
2. open a different client page in a different browser
3. click to create a loan (Educational Loan) in browser 1 with a source of fund
(Funding Org D)
4. click to create a loan (Educational Loan) in browser 2 with a source of fund
(Funding Org D)
5. click preview submit in browser 2
6. click preview submit in browser 1
7. click submit for approval in browser 2
8. click submit for approval in browser 1
9. see red dot error in browser 1 (and stack trace in log file)
2010-05-04/13:54:27.008/EEST ERROR,
org.hibernate.event.def.AbstractFlushingEventListener, ?, ?, ?, Could not
synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another
transaction (or unsaved-value mapping was incorrect):
[org.mifos.accounts.fund.business.FundBO#1]
at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1765)
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2407)
at
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
at
org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
at
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at
org.mifos.framework.hibernate.helper.HibernateUtil.commitTransaction(HibernateUtil.java:204)
at
org.mifos.framework.hibernate.helper.StaticHibernateUtil.commitTransaction(StaticHibernateUtil.java:113)
at
org.mifos.framework.struts.action.BaseAction.postExecute(BaseAction.java:211)
at
org.mifos.framework.struts.action.BaseAction.execute(BaseAction.java:109)
at
org.mifos.framework.struts.action.MifosRequestProcessor.processActionPerform(MifosRequestProcessor.java:204)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.mifos.security.util.LoginFilter.doFilter(LoginFilter.java:85)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.mifos.framework.persistence.DatabaseInitFilter.doFilter(DatabaseInitFilter.java:51)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://mifosforge.jira.com/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
_______________________________________________
Mifos-issues mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mifos-issues