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

Reply via email to