ConcurrentModificationException in ModelScanner

46 views
Skip to first unread message

André Brito

unread,
Apr 9, 2021, 1:57:18 PM4/9/21
to hapi...@googlegroups.com

Hello guys,


I am having problems with java.util.ConcurrentModificationException in some methods who use methods from package ca.uhn.fhir.context. I am using v3.8.0 because the most recent versions are incompatible with my applications.


Analyzing this exception, I noticed that it happens when I use methods that call ca.uhn.fhir.context.ModelScanner.init. The error occurs in ModelScanner.java:102 when it tries to put all theExistingDefinitions into myClassToElementDefinitions.


I recently had a bug caused by using one JsonParser instance (ca.uhn.fhir.context.FhirContext.java:626), and I changed it to create one parser for each thread that I used, as recommended by the method JavaDoc. I am unsure if it helped this concurrent exception, but I noticed this exception often after this change. I send the modification print below.

image.png

image.png


Has anyone had the same problem and know how to resolve it? Is there any modification in the most recent version which fixes this problem?


Below, I send a stack trace example when the code throws this exception.

2021-03-10 18:54:58,832 ERROR [ca.uhn.fhir.rest.server.interceptor.ExceptionHandlingInterceptor] (default task-1402) Failure during REST processing: java.util.ConcurrentModificationException: 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 java.util.HashMap.putMapEntries(HashMap.java:512)
at java.util.HashMap.putAll(HashMap.java:785)
at ca.uhn.fhir.context.ModelScanner.init(ModelScanner.java:102)
at ca.uhn.fhir.context.ModelScanner.<init>(ModelScanner.java:69)
at ca.uhn.fhir.context.FhirContext.scanResourceTypes(FhirContext.java:767)
at ca.uhn.fhir.context.FhirContext.scanResourceType(FhirContext.java:753)
at ca.uhn.fhir.context.FhirContext.getResourceDefinition(FhirContext.java:393)
at ca.uhn.fhir.context.FhirContext.getResourceDefinition(FhirContext.java:433)
at ca.uhn.fhir.util.FhirTerser.getAllResourceReferences(FhirTerser.java:185)
at org.hl7.fhir.r4.hapi.rest.server.R4BundleFactory.addResourcesToBundle(R4BundleFactory.java:168)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.createBundleFromBundleProvider(BaseResourceReturningMethodBinding.java:224)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:329)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:374)
at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:988)
at ca.uhn.fhir.rest.server.RestfulServer.doGet(RestfulServer.java:333)
at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1585)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1514)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
at java.lang.Thread.run(Thread.java:748)

 

Thanks for your help!

Best regards,

---

André Brito, MSc. 

Analista de Sistemas




  www.prontlife.com.br

    

Débora Andrade

unread,
Apr 16, 2021, 11:25:24 AM4/16/21
to HAPI FHIR
Hi,

This is starting to be a huge problem to us, since randomly some requests are failing because of this exception.
Somebody has any idea of how to treat or prevent this from happening? 

Thanks in advance.

Reply all
Reply to author
Forward
0 new messages