OMRS Concurrent Modification Exception

We are using version 2.6.0 of reffapp. For some reason when trying to load the search results screen we are receiving this error. Which will sometimes subsequently go away upon refresh.

UI Framework Error
Root Error
java.util.ConcurrentModificationException
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
	at java.util.HashMap$EntryIterator.next(HashMap.java:1479)
	at java.util.HashMap$EntryIterator.next(HashMap.java:1477)
	at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.cleanup(JdbcCoordinatorImpl.java:507)
	at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.releaseResources(JdbcCoordinatorImpl.java:493)
	at org.hibernate.internal.SessionImpl.disconnect(SessionImpl.java:469)
	at org.springframework.orm.hibernate4.HibernateTransactionManager.disconnectOnCompletion(HibernateTransactionManager.java:697)
	at org.springframework.orm.hibernate4.HibernateTransactionManager.doCleanupAfterCompletion(HibernateTransactionManager.java:681)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1012)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:807)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:515)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
	at com.sun.proxy.$Proxy154.notifyPrivilegeListeners(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor575.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	at org.openmrs.aop.LoggingAdvice.invoke(LoggingAdvice.java:121)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
	at com.sun.proxy.$Proxy155.notifyPrivilegeListeners(Unknown Source)
	at org.openmrs.api.context.UserContext.hasPrivilege(UserContext.java:312)
	at org.openmrs.api.context.Context.hasPrivilege(Context.java:649)
	at org.openmrs.aop.AuthorizationAdvice.before(AuthorizationAdvice.java:78)
	at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:51)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
	at com.sun.proxy.$Proxy171.getPatient(Unknown Source)
	at org.openmrs.module.emrapi.utils.GeneralUtils.getLastViewedPatients(GeneralUtils.java:264)
	at org.openmrs.module.coreapps.fragment.controller.patientsearch.PatientSearchWidgetFragmentController.controller(PatientSearchWidgetFragmentController.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.openmrs.ui.framework.UiFrameworkUtil.invokeMethodWithArguments(UiFrameworkUtil.java:112)
	at org.openmrs.ui.framework.UiFrameworkUtil.executeControllerMethod(UiFrameworkUtil.java:71)
	at org.openmrs.ui.framework.fragment.FragmentFactory.handleRequestWithController(FragmentFactory.java:241)
	at org.openmrs.ui.framework.fragment.FragmentFactory.processThisFragment(FragmentFactory.java:160)
	at org.openmrs.ui.framework.fragment.FragmentFactory.process(FragmentFactory.java:124)
	at org.openmrs.ui.framework.page.PageContext.includeFragment(PageContext.java:75)
	at org.openmrs.ui.framework.UiUtils.includeFragment(UiUtils.java:158)
	at org.openmrs.ui.framework.UiUtils$includeFragment$17.call(Unknown Source)
	at SimpleTemplateScript14.run(SimpleTemplateScript14.groovy:32)
	at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.writeTo(SimpleTemplateEngine.java:168)
	at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.toString(SimpleTemplateEngine.java:180)
	at org.openmrs.ui.framework.page.GroovyPageView.render(GroovyPageView.java:43)
	at org.openmrs.ui.framework.page.PageFactory.processThisFragment(PageFactory.java:187)
	at org.openmrs.ui.framework.page.PageFactory.process(PageFactory.java:116)
	at org.openmrs.ui.framework.page.PageFactory.handle(PageFactory.java:86)
	at org.openmrs.module.uiframework.PageController.handlePath(PageController.java:116)
	at org.openmrs.module.uiframework.PageController.handleUrlWithDotPage(PageController.java:83)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)

Has anyone run into this?

1 Like

What happens when you clear the browser cache and run again the use case?

it would be good to look at the full server logs @ccwhite23

The issue is isantePlus Specific and caused by multiple threads at some point trying to acces the same patient Object . One thread tries to loop through the Patients and another Thread tries to modify the same object . Objects loaded by Hibernate are not thread safe