diff --git a/docker/Transformation-Engine/database/h2.mv.db b/docker/Transformation-Engine/database/h2.mv.db new file mode 100644 index 0000000..5a4ca5c Binary files /dev/null and b/docker/Transformation-Engine/database/h2.mv.db differ diff --git a/docker/Transformation-Engine/database/h2.trace.db b/docker/Transformation-Engine/database/h2.trace.db new file mode 100644 index 0000000..9ba5f2f --- /dev/null +++ b/docker/Transformation-Engine/database/h2.trace.db @@ -0,0 +1,1494 @@ +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: The database is open in exclusive mode; can not open additional connections [90135-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.engine.Session.checkSuspended(Session.java:1369) + at org.h2.engine.Session.transitionToState(Session.java:1361) + at org.h2.engine.Session.waitIfExclusiveModeEnabled(Session.java:1633) + at org.h2.command.Command.executeQuery(Command.java:186) + at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114) + at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) + at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) + at org.hibernate.loader.Loader.getResultSet(Loader.java:2303) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2056) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2018) + at org.hibernate.loader.Loader.scroll(Loader.java:2926) + at org.hibernate.loader.custom.CustomLoader.scroll(CustomLoader.java:383) + at org.hibernate.internal.SessionImpl.scrollCustomQuery(SessionImpl.java:2116) + at org.hibernate.internal.AbstractSharedSessionContract.scroll(AbstractSharedSessionContract.java:1177) + at org.hibernate.query.internal.NativeQueryImpl.doScroll(NativeQueryImpl.java:223) + at org.hibernate.query.internal.AbstractProducedQuery.scroll(AbstractProducedQuery.java:1548) + at org.hibernate.query.internal.AbstractProducedQuery.scroll(AbstractProducedQuery.java:115) + at ca.uhn.fhir.jpa.search.builder.sql.SearchQueryExecutor.fetchNext(SearchQueryExecutor.java:122) + at ca.uhn.fhir.jpa.search.builder.sql.SearchQueryExecutor.hasNext(SearchQueryExecutor.java:87) + at ca.uhn.fhir.jpa.search.builder.SearchBuilder$QueryIterator.fetchNext(SearchBuilder.java:1384) + at ca.uhn.fhir.jpa.search.builder.SearchBuilder$QueryIterator.hasNext(SearchBuilder.java:1517) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.lambda$executeQuery$4(SearchCoordinatorSvcImpl.java:503) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.executeQuery(SearchCoordinatorSvcImpl.java:473) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.registerSearch(SearchCoordinatorSvcImpl.java:332) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl$$FastClassBySpringCGLIB$$b0ac938b.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl$$EnhancerBySpringCGLIB$$2951db5b.registerSearch() + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1431) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1395) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1389) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao$$FastClassBySpringCGLIB$$5578fb67.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoStructureDefinitionR4$$EnhancerBySpringCGLIB$$eea42efe.search() + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport.fetchAllStructureDefinitions(JpaPersistedResourceValidationSupport.java:163) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$FastClassBySpringCGLIB$$d5c592c1.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcStatement.checkClosed(JdbcStatement.java:1211) + at org.h2.jdbc.JdbcPreparedStatement.checkClosed(JdbcPreparedStatement.java:1738) + at org.h2.jdbc.JdbcStatement.checkClosed(JdbcStatement.java:1185) + at org.h2.jdbc.JdbcStatement.getMaxRows(JdbcStatement.java:430) + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.getMaxRows(HikariProxyPreparedStatement.java) + at org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl.close(ResourceRegistryStandardImpl.java:183) + at org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl.release(ResourceRegistryStandardImpl.java:109) + at org.hibernate.loader.Loader.getResultSet(Loader.java:2308) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2056) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2018) + at org.hibernate.loader.Loader.scroll(Loader.java:2926) + at org.hibernate.loader.custom.CustomLoader.scroll(CustomLoader.java:383) + at org.hibernate.internal.SessionImpl.scrollCustomQuery(SessionImpl.java:2116) + at org.hibernate.internal.AbstractSharedSessionContract.scroll(AbstractSharedSessionContract.java:1177) + at org.hibernate.query.internal.NativeQueryImpl.doScroll(NativeQueryImpl.java:223) + at org.hibernate.query.internal.AbstractProducedQuery.scroll(AbstractProducedQuery.java:1548) + at org.hibernate.query.internal.AbstractProducedQuery.scroll(AbstractProducedQuery.java:115) + at ca.uhn.fhir.jpa.search.builder.sql.SearchQueryExecutor.fetchNext(SearchQueryExecutor.java:122) + at ca.uhn.fhir.jpa.search.builder.sql.SearchQueryExecutor.hasNext(SearchQueryExecutor.java:87) + at ca.uhn.fhir.jpa.search.builder.SearchBuilder$QueryIterator.fetchNext(SearchBuilder.java:1384) + at ca.uhn.fhir.jpa.search.builder.SearchBuilder$QueryIterator.hasNext(SearchBuilder.java:1517) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.lambda$executeQuery$4(SearchCoordinatorSvcImpl.java:503) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.executeQuery(SearchCoordinatorSvcImpl.java:473) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl.registerSearch(SearchCoordinatorSvcImpl.java:332) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl$$FastClassBySpringCGLIB$$b0ac938b.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl$$EnhancerBySpringCGLIB$$2951db5b.registerSearch() + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1431) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1395) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.search(BaseHapiFhirResourceDao.java:1389) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao$$FastClassBySpringCGLIB$$5578fb67.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoStructureDefinitionR4$$EnhancerBySpringCGLIB$$eea42efe.search() + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport.fetchAllStructureDefinitions(JpaPersistedResourceValidationSupport.java:163) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$FastClassBySpringCGLIB$$d5c592c1.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1500) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:556) + at com.zaxxer.hikari.pool.ProxyConnection.rollback(ProxyConnection.java:359) + at com.zaxxer.hikari.pool.HikariProxyConnection.rollback(HikariProxyConnection.java) + at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:121) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:304) + at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:142) + at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:589) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:835) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.getWarnings(JdbcConnection.java:689) + at com.zaxxer.hikari.pool.HikariProxyConnection.getWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:290) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.clearWarnings(JdbcConnection.java:703) + at com.zaxxer.hikari.pool.HikariProxyConnection.clearWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1500) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:556) + at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:230) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.closeConnection(DatasourceConnectionProviderImpl.java:127) + at org.hibernate.internal.NonContextualJdbcConnectionAccess.releaseConnection(NonContextualJdbcConnectionAccess.java:49) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:217) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.JpaPersistedResourceValidationSupport$$EnhancerBySpringCGLIB$$97830abd.fetchAllStructureDefinitions() + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.lambda$fetchAllStructureDefinitions$0(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.doFetchStructureDefinitions(ValidationSupportChain.java:200) + at org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain.fetchAllStructureDefinitions(ValidationSupportChain.java:188) + at org.hl7.fhir.common.hapi.validation.support.BaseValidationSupportWrapper.fetchAllStructureDefinitions(BaseValidationSupportWrapper.java:51) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$fetchAllStructureDefinitions$1(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.lambda$loadFromCache$14(CachingValidationSupport.java:157) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2405) + at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2403) + at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2386) + at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108) + at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.loadFromCache(CachingValidationSupport.java:158) + at org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport.fetchAllStructureDefinitions(CachingValidationSupport.java:84) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.allStructures(VersionSpecificWorkerContextWrapper.java:215) + at org.hl7.fhir.common.hapi.validation.validator.VersionSpecificWorkerContextWrapper.getStructures(VersionSpecificWorkerContextWrapper.java:231) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:319) + at org.hl7.fhir.r5.conformance.ProfileUtilities.(ProfileUtilities.java:357) + at org.hl7.fhir.r5.utils.FHIRPathEngine.(FHIRPathEngine.java:312) + at org.hl7.fhir.r5.elementmodel.JsonParser.(JsonParser.java:91) + at org.hl7.fhir.r5.elementmodel.Manager.makeParser(Manager.java:105) + at org.hl7.fhir.r5.elementmodel.Manager.parseSingle(Manager.java:95) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.transfrom(StructureMapTransformProvider.java:156) + at ch.ahdis.matchbox.mappinglanguage.StructureMapTransformProvider.manualInputAndOutput(StructureMapTransformProvider.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at ca.uhn.fhir.rest.server.method.BaseMethodBinding.invokeServerMethod(BaseMethodBinding.java:264) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:332) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:326) + at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:434) + at ca.uhn.fhir.rest.server.method.OperationMethodBinding.invokeServer(OperationMethodBinding.java:307) + at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1152) + at ca.uhn.fhir.jpa.starter.JpaRestfulServer.handleRequest(JpaRestfulServer.java:31) + at ca.uhn.fhir.rest.server.RestfulServer.doPost(RestfulServer.java:423) + at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1861) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:834) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.getAutoCommit(JdbcConnection.java:516) + at com.zaxxer.hikari.pool.HikariProxyConnection.getAutoCommit(HikariProxyConnection.java) + at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.determineInitialAutoCommitMode(AbstractLogicalConnectionImplementor.java:135) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:281) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:246) + at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:83) + at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:164) + at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:421) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:149) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:83) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:75) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.searchForIds(BaseHapiFhirResourceDao.java:1508) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao.searchForIds(IFhirResourceDao.java:216) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao$$FastClassBySpringCGLIB$$d50e42b3.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSubscriptionR4$$EnhancerBySpringCGLIB$$c28db1eb.searchForIds() + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl.getVersionMap(ResourceVersionSvcDaoImpl.java:74) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc.getVersionMap(IResourceVersionSvc.java:40) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc$$FastClassBySpringCGLIB$$6b459960.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl$$EnhancerBySpringCGLIB$$3c670251.getVersionMap() + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshCacheAndNotifyListener(ResourceChangeListenerCacheRefresherImpl.java:133) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.lambda$refreshCacheAndNotifyListenersWithRetry$0(ResourceChangeListenerCache.java:145) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.lambda$runWithRetry$0(Retrier.java:87) + at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) + at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.runWithRetry(Retrier.java:87) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheAndNotifyListenersWithRetry(ResourceChangeListenerCache.java:148) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheWithRetry(ResourceChangeListenerCache.java:130) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheIfNecessary(ResourceChangeListenerCache.java:111) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshExpiredCachesAndNotifyListeners(ResourceChangeListenerCacheRefresherImpl.java:90) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl$Job.execute(ResourceChangeListenerCacheRefresherImpl.java:80) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:495) + at com.zaxxer.hikari.pool.ProxyConnection.setAutoCommit(ProxyConnection.java:377) + at com.zaxxer.hikari.pool.HikariProxyConnection.setAutoCommit(HikariProxyConnection.java) + at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.begin(AbstractLogicalConnectionImplementor.java:72) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:283) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:246) + at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:83) + at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:164) + at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:421) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:149) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:83) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:75) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.searchForIds(BaseHapiFhirResourceDao.java:1508) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao.searchForIds(IFhirResourceDao.java:216) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao$$FastClassBySpringCGLIB$$d50e42b3.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSubscriptionR4$$EnhancerBySpringCGLIB$$c28db1eb.searchForIds() + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl.getVersionMap(ResourceVersionSvcDaoImpl.java:74) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc.getVersionMap(IResourceVersionSvc.java:40) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc$$FastClassBySpringCGLIB$$6b459960.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl$$EnhancerBySpringCGLIB$$3c670251.getVersionMap() + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshCacheAndNotifyListener(ResourceChangeListenerCacheRefresherImpl.java:133) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.lambda$refreshCacheAndNotifyListenersWithRetry$0(ResourceChangeListenerCache.java:145) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.lambda$runWithRetry$0(Retrier.java:87) + at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) + at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.runWithRetry(Retrier.java:87) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheAndNotifyListenersWithRetry(ResourceChangeListenerCache.java:148) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheWithRetry(ResourceChangeListenerCache.java:130) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheIfNecessary(ResourceChangeListenerCache.java:111) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshExpiredCachesAndNotifyListeners(ResourceChangeListenerCacheRefresherImpl.java:90) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl$Job.execute(ResourceChangeListenerCacheRefresherImpl.java:80) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.getWarnings(JdbcConnection.java:689) + at com.zaxxer.hikari.pool.HikariProxyConnection.getWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:290) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.closeEntityManagerAfterFailedBegin(JpaTransactionManager.java:514) + at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:466) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:149) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:83) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:75) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.searchForIds(BaseHapiFhirResourceDao.java:1508) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao.searchForIds(IFhirResourceDao.java:216) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao$$FastClassBySpringCGLIB$$d50e42b3.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSubscriptionR4$$EnhancerBySpringCGLIB$$c28db1eb.searchForIds() + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl.getVersionMap(ResourceVersionSvcDaoImpl.java:74) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc.getVersionMap(IResourceVersionSvc.java:40) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc$$FastClassBySpringCGLIB$$6b459960.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl$$EnhancerBySpringCGLIB$$3c670251.getVersionMap() + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshCacheAndNotifyListener(ResourceChangeListenerCacheRefresherImpl.java:133) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.lambda$refreshCacheAndNotifyListenersWithRetry$0(ResourceChangeListenerCache.java:145) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.lambda$runWithRetry$0(Retrier.java:87) + at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) + at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.runWithRetry(Retrier.java:87) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheAndNotifyListenersWithRetry(ResourceChangeListenerCache.java:148) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheWithRetry(ResourceChangeListenerCache.java:130) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheIfNecessary(ResourceChangeListenerCache.java:111) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshExpiredCachesAndNotifyListeners(ResourceChangeListenerCacheRefresherImpl.java:90) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl$Job.execute(ResourceChangeListenerCacheRefresherImpl.java:80) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.clearWarnings(JdbcConnection.java:703) + at com.zaxxer.hikari.pool.HikariProxyConnection.clearWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.closeEntityManagerAfterFailedBegin(JpaTransactionManager.java:514) + at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:466) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:149) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:83) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:75) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.searchForIds(BaseHapiFhirResourceDao.java:1508) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao.searchForIds(IFhirResourceDao.java:216) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao$$FastClassBySpringCGLIB$$d50e42b3.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSubscriptionR4$$EnhancerBySpringCGLIB$$c28db1eb.searchForIds() + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl.getVersionMap(ResourceVersionSvcDaoImpl.java:74) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc.getVersionMap(IResourceVersionSvc.java:40) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc$$FastClassBySpringCGLIB$$6b459960.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl$$EnhancerBySpringCGLIB$$3c670251.getVersionMap() + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshCacheAndNotifyListener(ResourceChangeListenerCacheRefresherImpl.java:133) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.lambda$refreshCacheAndNotifyListenersWithRetry$0(ResourceChangeListenerCache.java:145) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.lambda$runWithRetry$0(Retrier.java:87) + at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) + at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.runWithRetry(Retrier.java:87) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheAndNotifyListenersWithRetry(ResourceChangeListenerCache.java:148) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheWithRetry(ResourceChangeListenerCache.java:130) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheIfNecessary(ResourceChangeListenerCache.java:111) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshExpiredCachesAndNotifyListeners(ResourceChangeListenerCacheRefresherImpl.java:90) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl$Job.execute(ResourceChangeListenerCacheRefresherImpl.java:80) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-05 17:12:07 jdbc[8]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.clearWarnings(JdbcConnection.java:703) + at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:240) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.closeConnection(DatasourceConnectionProviderImpl.java:127) + at org.hibernate.internal.NonContextualJdbcConnectionAccess.releaseConnection(NonContextualJdbcConnectionAccess.java:49) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:217) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.closeEntityManagerAfterFailedBegin(JpaTransactionManager.java:514) + at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:466) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.doExecuteCallback(HapiTransactionService.java:149) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:83) + at ca.uhn.fhir.jpa.dao.tx.HapiTransactionService.execute(HapiTransactionService.java:75) + at ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.searchForIds(BaseHapiFhirResourceDao.java:1508) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao.searchForIds(IFhirResourceDao.java:216) + at ca.uhn.fhir.jpa.api.dao.IFhirResourceDao$$FastClassBySpringCGLIB$$d50e42b3.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSubscriptionR4$$EnhancerBySpringCGLIB$$c28db1eb.searchForIds() + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl.getVersionMap(ResourceVersionSvcDaoImpl.java:74) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc.getVersionMap(IResourceVersionSvc.java:40) + at ca.uhn.fhir.jpa.cache.IResourceVersionSvc$$FastClassBySpringCGLIB$$6b459960.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) + at ca.uhn.fhir.jpa.cache.ResourceVersionSvcDaoImpl$$EnhancerBySpringCGLIB$$3c670251.getVersionMap() + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshCacheAndNotifyListener(ResourceChangeListenerCacheRefresherImpl.java:133) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.lambda$refreshCacheAndNotifyListenersWithRetry$0(ResourceChangeListenerCache.java:145) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.lambda$runWithRetry$0(Retrier.java:87) + at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) + at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) + at ca.uhn.fhir.jpa.searchparam.retry.Retrier.runWithRetry(Retrier.java:87) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheAndNotifyListenersWithRetry(ResourceChangeListenerCache.java:148) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheWithRetry(ResourceChangeListenerCache.java:130) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCache.refreshCacheIfNecessary(ResourceChangeListenerCache.java:111) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl.refreshExpiredCachesAndNotifyListeners(ResourceChangeListenerCacheRefresherImpl.java:90) + at ca.uhn.fhir.jpa.cache.ResourceChangeListenerCacheRefresherImpl$Job.execute(ResourceChangeListenerCacheRefresherImpl.java:80) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 jdbc[4]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:350) + at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:308) + at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149) + at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) + at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:151) + at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2103) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2040) + at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2018) + at org.hibernate.loader.Loader.doQuery(Loader.java:948) + at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349) + at org.hibernate.loader.Loader.doList(Loader.java:2849) + at org.hibernate.loader.Loader.doList(Loader.java:2831) + at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2663) + at org.hibernate.loader.Loader.list(Loader.java:2658) + at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506) + at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400) + at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219) + at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1414) + at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1625) + at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1593) + at org.hibernate.query.Query.getResultList(Query.java:165) + at org.springframework.data.jpa.repository.query.JpaQueryExecution$SlicedExecution.doExecute(JpaQueryExecution.java:156) + at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) + at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155) + at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:159) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) + at com.sun.proxy.$Proxy172.findWhereCreatedBefore(Unknown Source) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.lambda$pollForStaleSearchesAndDeleteThem$1(DatabaseSearchCacheSvcImpl.java:185) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.pollForStaleSearchesAndDeleteThem(DatabaseSearchCacheSvcImpl.java:184) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$FastClassBySpringCGLIB$$f9ac20c0.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$EnhancerBySpringCGLIB$$fcd8751.pollForStaleSearchesAndDeleteThem() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.pollForStaleSearchesAndDeleteThem(StaleSearchDeletingSvcImpl.java:57) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.schedulePollForStaleSearches(StaleSearchDeletingSvcImpl.java:82) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$FastClassBySpringCGLIB$$979cdeaa.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$EnhancerBySpringCGLIB$$dfa8c34f.schedulePollForStaleSearches() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$Job.execute(StaleSearchDeletingSvcImpl.java:74) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 jdbc[4]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1500) + at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:556) + at com.zaxxer.hikari.pool.ProxyConnection.rollback(ProxyConnection.java:359) + at com.zaxxer.hikari.pool.HikariProxyConnection.rollback(HikariProxyConnection.java) + at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:121) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:304) + at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:142) + at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:589) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:835) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.pollForStaleSearchesAndDeleteThem(DatabaseSearchCacheSvcImpl.java:184) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$FastClassBySpringCGLIB$$f9ac20c0.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$EnhancerBySpringCGLIB$$fcd8751.pollForStaleSearchesAndDeleteThem() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.pollForStaleSearchesAndDeleteThem(StaleSearchDeletingSvcImpl.java:57) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.schedulePollForStaleSearches(StaleSearchDeletingSvcImpl.java:82) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$FastClassBySpringCGLIB$$979cdeaa.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$EnhancerBySpringCGLIB$$dfa8c34f.schedulePollForStaleSearches() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$Job.execute(StaleSearchDeletingSvcImpl.java:74) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 jdbc[4]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.getWarnings(JdbcConnection.java:689) + at com.zaxxer.hikari.pool.HikariProxyConnection.getWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:290) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.pollForStaleSearchesAndDeleteThem(DatabaseSearchCacheSvcImpl.java:184) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$FastClassBySpringCGLIB$$f9ac20c0.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$EnhancerBySpringCGLIB$$fcd8751.pollForStaleSearchesAndDeleteThem() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.pollForStaleSearchesAndDeleteThem(StaleSearchDeletingSvcImpl.java:57) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.schedulePollForStaleSearches(StaleSearchDeletingSvcImpl.java:82) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$FastClassBySpringCGLIB$$979cdeaa.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$EnhancerBySpringCGLIB$$dfa8c34f.schedulePollForStaleSearches() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$Job.execute(StaleSearchDeletingSvcImpl.java:74) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 jdbc[4]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.clearWarnings(JdbcConnection.java:703) + at com.zaxxer.hikari.pool.HikariProxyConnection.clearWarnings(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299) + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:213) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.pollForStaleSearchesAndDeleteThem(DatabaseSearchCacheSvcImpl.java:184) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$FastClassBySpringCGLIB$$f9ac20c0.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$EnhancerBySpringCGLIB$$fcd8751.pollForStaleSearchesAndDeleteThem() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.pollForStaleSearchesAndDeleteThem(StaleSearchDeletingSvcImpl.java:57) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.schedulePollForStaleSearches(StaleSearchDeletingSvcImpl.java:82) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$FastClassBySpringCGLIB$$979cdeaa.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$EnhancerBySpringCGLIB$$dfa8c34f.schedulePollForStaleSearches() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$Job.execute(StaleSearchDeletingSvcImpl.java:74) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 jdbc[4]: exception +org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + at org.h2.message.DbException.get(DbException.java:205) + at org.h2.message.DbException.get(DbException.java:181) + at org.h2.message.DbException.get(DbException.java:170) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1514) + at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1490) + at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:495) + at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206) + at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108) + at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.closeConnection(DatasourceConnectionProviderImpl.java:127) + at org.hibernate.internal.NonContextualJdbcConnectionAccess.releaseConnection(NonContextualJdbcConnectionAccess.java:49) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:217) + at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close(LogicalConnectionManagedImpl.java:259) + at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:175) + at org.hibernate.internal.AbstractSharedSessionContract.close(AbstractSharedSessionContract.java:351) + at org.hibernate.internal.SessionImpl.closeWithoutOpenChecks(SessionImpl.java:376) + at org.hibernate.internal.SessionImpl.close(SessionImpl.java:361) + at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:427) + at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:650) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1004) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:875) + at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) + at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl.pollForStaleSearchesAndDeleteThem(DatabaseSearchCacheSvcImpl.java:184) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$FastClassBySpringCGLIB$$f9ac20c0.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.cache.DatabaseSearchCacheSvcImpl$$EnhancerBySpringCGLIB$$fcd8751.pollForStaleSearchesAndDeleteThem() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.pollForStaleSearchesAndDeleteThem(StaleSearchDeletingSvcImpl.java:57) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl.schedulePollForStaleSearches(StaleSearchDeletingSvcImpl.java:82) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$FastClassBySpringCGLIB$$979cdeaa.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$$EnhancerBySpringCGLIB$$dfa8c34f.schedulePollForStaleSearches() + at ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl$Job.execute(StaleSearchDeletingSvcImpl.java:74) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2022-01-10 12:23:47 database: flush +org.h2.message.DbException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:93) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2877) + at org.h2.mvstore.MVStore.panic(MVStore.java:481) + at org.h2.mvstore.MVStore.(MVStore.java:402) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) + at org.h2.engine.Database.getPageStore(Database.java:2659) + at org.h2.engine.Database.open(Database.java:675) + at org.h2.engine.Database.openDatabase(Database.java:307) + at org.h2.engine.Database.(Database.java:301) + at org.h2.engine.Engine.openSession(Engine.java:74) + at org.h2.engine.Engine.openSession(Engine.java:192) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) + at org.h2.engine.Engine.createSession(Engine.java:166) + at org.h2.engine.Engine.createSession(Engine.java:29) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) + at org.h2.Driver.connect(Driver.java:69) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428) + at com.zaxxer.hikari.pool.HikariPool.access$300(HikariPool.java:70) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:612) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:598) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at java.base/java.lang.Thread.run(Thread.java:834) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + ... 35 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) + at org.h2.mvstore.FileStore.open(FileStore.java:166) + at org.h2.mvstore.MVStore.(MVStore.java:381) + ... 29 more +Caused by: java.nio.channels.OverlappingFileLockException + at java.base/sun.nio.ch.FileLockTable.checkList(FileLockTable.java:229) + at java.base/sun.nio.ch.FileLockTable.add(FileLockTable.java:123) + at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1154) + at org.h2.store.fs.FileNio.tryLock(FilePathNio.java:121) + at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + ... 30 more +2022-01-10 12:23:48 database: flush +org.h2.message.DbException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:93) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2877) + at org.h2.mvstore.MVStore.panic(MVStore.java:481) + at org.h2.mvstore.MVStore.(MVStore.java:402) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) + at org.h2.engine.Database.getPageStore(Database.java:2659) + at org.h2.engine.Database.open(Database.java:675) + at org.h2.engine.Database.openDatabase(Database.java:307) + at org.h2.engine.Database.(Database.java:301) + at org.h2.engine.Engine.openSession(Engine.java:74) + at org.h2.engine.Engine.openSession(Engine.java:192) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) + at org.h2.engine.Engine.createSession(Engine.java:166) + at org.h2.engine.Engine.createSession(Engine.java:29) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) + at org.h2.Driver.connect(Driver.java:69) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428) + at com.zaxxer.hikari.pool.HikariPool.access$300(HikariPool.java:70) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:612) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:598) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at java.base/java.lang.Thread.run(Thread.java:834) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + ... 35 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) + at org.h2.mvstore.FileStore.open(FileStore.java:166) + at org.h2.mvstore.MVStore.(MVStore.java:381) + ... 29 more +Caused by: java.nio.channels.OverlappingFileLockException + at java.base/sun.nio.ch.FileLockTable.checkList(FileLockTable.java:229) + at java.base/sun.nio.ch.FileLockTable.add(FileLockTable.java:123) + at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1154) + at org.h2.store.fs.FileNio.tryLock(FilePathNio.java:121) + at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + ... 30 more +2022-01-10 12:23:48 database: flush +org.h2.message.DbException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:93) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2877) + at org.h2.mvstore.MVStore.panic(MVStore.java:481) + at org.h2.mvstore.MVStore.(MVStore.java:402) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) + at org.h2.engine.Database.getPageStore(Database.java:2659) + at org.h2.engine.Database.open(Database.java:675) + at org.h2.engine.Database.openDatabase(Database.java:307) + at org.h2.engine.Database.(Database.java:301) + at org.h2.engine.Engine.openSession(Engine.java:74) + at org.h2.engine.Engine.openSession(Engine.java:192) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) + at org.h2.engine.Engine.createSession(Engine.java:166) + at org.h2.engine.Engine.createSession(Engine.java:29) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) + at org.h2.Driver.connect(Driver.java:69) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428) + at com.zaxxer.hikari.pool.HikariPool.access$300(HikariPool.java:70) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:612) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:598) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at java.base/java.lang.Thread.run(Thread.java:834) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + ... 35 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) + at org.h2.mvstore.FileStore.open(FileStore.java:166) + at org.h2.mvstore.MVStore.(MVStore.java:381) + ... 29 more +Caused by: java.nio.channels.OverlappingFileLockException + at java.base/sun.nio.ch.FileLockTable.checkList(FileLockTable.java:229) + at java.base/sun.nio.ch.FileLockTable.add(FileLockTable.java:123) + at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1154) + at org.h2.store.fs.FileNio.tryLock(FilePathNio.java:121) + at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + ... 30 more +2022-01-10 12:23:49 database: flush +org.h2.message.DbException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:93) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2877) + at org.h2.mvstore.MVStore.panic(MVStore.java:481) + at org.h2.mvstore.MVStore.(MVStore.java:402) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) + at org.h2.engine.Database.getPageStore(Database.java:2659) + at org.h2.engine.Database.open(Database.java:675) + at org.h2.engine.Database.openDatabase(Database.java:307) + at org.h2.engine.Database.(Database.java:301) + at org.h2.engine.Engine.openSession(Engine.java:74) + at org.h2.engine.Engine.openSession(Engine.java:192) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) + at org.h2.engine.Engine.createSession(Engine.java:166) + at org.h2.engine.Engine.createSession(Engine.java:29) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) + at org.h2.Driver.connect(Driver.java:69) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428) + at com.zaxxer.hikari.pool.HikariPool.access$300(HikariPool.java:70) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:612) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:598) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at java.base/java.lang.Thread.run(Thread.java:834) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + ... 35 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) + at org.h2.mvstore.FileStore.open(FileStore.java:166) + at org.h2.mvstore.MVStore.(MVStore.java:381) + ... 29 more +Caused by: java.nio.channels.OverlappingFileLockException + at java.base/sun.nio.ch.FileLockTable.checkList(FileLockTable.java:229) + at java.base/sun.nio.ch.FileLockTable.add(FileLockTable.java:123) + at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1154) + at org.h2.store.fs.FileNio.tryLock(FilePathNio.java:121) + at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + ... 30 more +2022-01-10 12:23:49 database: flush +org.h2.message.DbException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:93) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2877) + at org.h2.mvstore.MVStore.panic(MVStore.java:481) + at org.h2.mvstore.MVStore.(MVStore.java:402) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) + at org.h2.engine.Database.getPageStore(Database.java:2659) + at org.h2.engine.Database.open(Database.java:675) + at org.h2.engine.Database.openDatabase(Database.java:307) + at org.h2.engine.Database.(Database.java:301) + at org.h2.engine.Engine.openSession(Engine.java:74) + at org.h2.engine.Engine.openSession(Engine.java:192) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) + at org.h2.engine.Engine.createSession(Engine.java:166) + at org.h2.engine.Engine.createSession(Engine.java:29) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) + at org.h2.Driver.connect(Driver.java:69) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:428) + at com.zaxxer.hikari.pool.HikariPool.access$300(HikariPool.java:70) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:612) + at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:598) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at java.base/java.lang.Thread.run(Thread.java:834) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7]" [50000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) + ... 35 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/seyed.jalal.hosseini/projects/nhsd/matchbox/database/h2.mv.db [1.4.200/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) + at org.h2.mvstore.FileStore.open(FileStore.java:166) + at org.h2.mvstore.MVStore.(MVStore.java:381) + ... 29 more +Caused by: java.nio.channels.OverlappingFileLockException + at java.base/sun.nio.ch.FileLockTable.checkList(FileLockTable.java:229) + at java.base/sun.nio.ch.FileLockTable.add(FileLockTable.java:123) + at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1154) + at org.h2.store.fs.FileNio.tryLock(FilePathNio.java:121) + at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + ... 30 more diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Converter.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Converter.java new file mode 100644 index 0000000..8d5d55a --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Converter.java @@ -0,0 +1,24 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.hl7.fhir.convertors.conv30_40.VersionConvertor_30_40; +import org.hl7.fhir.dstu3.model.Resource; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.springframework.stereotype.Component; + +@Component +public class Converter { + private final VersionConvertor_30_40 converter; + + public Converter(VersionConvertor_30_40 converter) { + this.converter = converter; + } + + public IBaseResource convert(IBaseResource resource, FhirVersionEnum version) { + if (FhirVersionEnum.R4 == version) { + return converter.convertResource((org.hl7.fhir.r4.model.Resource) resource); + } else { + return converter.convertResource((Resource) resource); + } + } +} diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ConverterService.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ConverterService.java new file mode 100644 index 0000000..fd7b33a --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ConverterService.java @@ -0,0 +1,36 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; + +@Service +public class ConverterService { + + private final Converter converter; + private final Transformer transformer; + private final FhirParser fhirParser; + + public ConverterService(Converter converter, Transformer transformer, FhirParser fhirParser) { + this.converter = converter; + this.transformer = transformer; + this.fhirParser = fhirParser; + } + + public String convert(String resource, MediaType mediaType, FhirVersionEnum fhirVersion) throws ParserConfigurationException, IOException, SAXException { + Class resourceType = ResourceTypeFactory.createResourceType(resource, mediaType, fhirVersion); + + IBaseResource fhirResource = fhirParser.parse(resource, resourceType, mediaType); + IBaseResource converted = converter.convert(fhirResource, fhirVersion); + IBaseResource transformed = transformer.transform(converted); + + FhirVersionEnum outVersion = fhirVersion == FhirVersionEnum.R4 ? FhirVersionEnum.DSTU3 : FhirVersionEnum.R4; + + return fhirParser.encode(transformed, mediaType, outVersion); + } +} diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirConfig.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirConfig.java new file mode 100644 index 0000000..86d3a00 --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirConfig.java @@ -0,0 +1,46 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; +import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_30_40; +import org.hl7.fhir.convertors.conv30_40.VersionConvertor_30_40; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FhirConfig { + @Bean + public FhirContext stu3FhirContext() { + return FhirContext.forDstu3(); + } + + @Bean + public FhirContext r4FhirContext() { + return FhirContext.forR4(); + } + + @Bean + public IParser stu3XmlParser(FhirContext stu3FhirContext) { + return stu3FhirContext.newXmlParser(); + } + + @Bean + public IParser stu3JsonParser(FhirContext stu3FhirContext) { + return stu3FhirContext.newJsonParser(); + } + + @Bean + public IParser r4XmlParser(FhirContext r4FhirContext) { + return r4FhirContext.newXmlParser(); + } + + @Bean + public IParser r4JsonParser(FhirContext r4FhirContext) { + return r4FhirContext.newJsonParser(); + } + + @Bean + public VersionConvertor_30_40 Converter30To40() { + return new VersionConvertor_30_40(new BaseAdvisor_30_40()); + } +} diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirParser.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirParser.java new file mode 100644 index 0000000..dd74a9c --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/FhirParser.java @@ -0,0 +1,60 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import ca.uhn.fhir.parser.IParser; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; + +@Component +public class FhirParser { + private final IParser stu3JsonParser; + private final IParser r4JsonParser; + private final IParser stu3XmlParser; + private final IParser r4XmlParser; + + public FhirParser(IParser stu3JsonParser, IParser r4JsonParser, IParser stu3XmlParser, IParser r4XmlParser) { + this.stu3JsonParser = stu3JsonParser; + this.r4JsonParser = r4JsonParser; + this.stu3XmlParser = stu3XmlParser; + this.r4XmlParser = r4XmlParser; + } + + public T parse(String resource, Class resourceType, MediaType mediaType) { + boolean isR4 = resourceType.getName().contains("r4"); + + if (MediaType.APPLICATION_JSON == mediaType) { + if (isR4) { + return r4JsonParser.parseResource(resourceType, resource); + } else { + return stu3JsonParser.parseResource(resourceType, resource); + } + } else if (MediaType.APPLICATION_XML == mediaType) { + if (isR4) { + return r4XmlParser.parseResource(resourceType, resource); + } else { + return stu3XmlParser.parseResource(resourceType, resource); + } + } + throw new IllegalStateException("Invalid Content-Type"); + } + + public String encode(IBaseResource resource, MediaType mediaType, FhirVersionEnum fhirVersion) { + boolean isR4 = FhirVersionEnum.R4 == fhirVersion; + + if (MediaType.APPLICATION_JSON == mediaType) { + if (isR4) { + return r4JsonParser.encodeResourceToString(resource); + } else { + return stu3JsonParser.encodeResourceToString(resource); + } + } else if (MediaType.APPLICATION_XML == mediaType) { + if (isR4) { + return r4XmlParser.encodeResourceToString(resource); + } else { + return stu3XmlParser.encodeResourceToString(resource); + } + } + throw new IllegalStateException("Invalid Accept header"); + } +} diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactory.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactory.java new file mode 100644 index 0000000..064a9b6 --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactory.java @@ -0,0 +1,50 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.MedicationStatement; +import org.json.JSONObject; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.StringReader; + +@Component +public class ResourceTypeFactory { + public static Class createResourceType(String fhirResource, MediaType mediaType, FhirVersionEnum fhirVersion) throws ParserConfigurationException, IOException, SAXException { + String resourceType = getResourceType(fhirResource, mediaType); + switch (resourceType) { + case "MedicationRequest": + return FhirVersionEnum.R4 == fhirVersion ? + MedicationRequest.class + : org.hl7.fhir.dstu3.model.MedicationRequest.class; + case "MedicationStatement": + return FhirVersionEnum.R4 == fhirVersion ? + MedicationStatement.class + : org.hl7.fhir.dstu3.model.MedicationStatement.class; + } + throw new IllegalStateException("Resource not supported"); + } + + private static String getResourceType(final String fhirSchema, MediaType mediaType) throws ParserConfigurationException, IOException, SAXException { + if ("xml".equals(mediaType.getSubtype())) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.parse(new InputSource(new StringReader(fhirSchema))); + + return doc.getFirstChild().getNodeName(); + } else { + JSONObject json = new JSONObject(fhirSchema); + + return json.getString("resourceType"); + } + } +} diff --git a/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Transformer.java b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Transformer.java new file mode 100644 index 0000000..6ea0861 --- /dev/null +++ b/docker/Transformation-Engine/src/main/java/nhsd/fhir/converter/service/mapping/Transformer.java @@ -0,0 +1,44 @@ +package nhsd.fhir.converter.service.mapping; + +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.hl7.fhir.r4.context.IWorkerContext; +import org.hl7.fhir.r4.context.SimpleWorkerContext; +import org.hl7.fhir.r4.model.StructureMap; +import org.hl7.fhir.r4.utils.StructureMapUtilities; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.io.InputStream; + +@Component +public class Transformer { + static private String medicationRequestStu3ToR4Fml; + private final StructureMap structureMap; + private final StructureMapUtilities structureMapUtilities; + + public Transformer() throws IOException { + IWorkerContext worker = new SimpleWorkerContext(); + structureMapUtilities = new StructureMapUtilities(worker); + structureMap = structureMapUtilities.parse(medicationRequestStu3ToR4Fml, "src"); + } + + IBaseResource transform(IBaseResource resource) { + org.hl7.fhir.r4.model.Resource source = (org.hl7.fhir.r4.model.Resource) resource; + org.hl7.fhir.r4.model.Resource target = source.copy(); + + structureMapUtilities.transform("source", source, structureMap, target); + + return target; + } + + static { +// InputStream is = Transformer.class.getClassLoader().getResourceAsStream("fml/MedicationRequest/STU3_to_R4.fml"); + InputStream is = Transformer.class.getClassLoader().getResourceAsStream("fml/MedicationRequest/extension.fml"); + try { + medicationRequestStu3ToR4Fml = new String(is.readAllBytes()); + } catch (IOException e) { + System.err.println("Can't load fml mapping file"); + } + + } +} diff --git a/docker/Transformation-Engine/src/main/resources/application.properties b/docker/Transformation-Engine/src/main/resources/application.properties deleted file mode 100644 index 99802c6..0000000 --- a/docker/Transformation-Engine/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=9000 \ No newline at end of file diff --git a/docker/Transformation-Engine/src/main/resources/application.yml b/docker/Transformation-Engine/src/main/resources/application.yml new file mode 100644 index 0000000..bf6537e --- /dev/null +++ b/docker/Transformation-Engine/src/main/resources/application.yml @@ -0,0 +1,35 @@ +spring: + datasource: + url: 'jdbc:h2:file:./database/h2' + username: sa + password: null + driverClassName: org.h2.Driver + max-active: 15 + + # database connection pool size + hikari: + maximum-pool-size: 10 + flyway: + check-location: false + baselineOnMigrate: true + jpa: + properties: + hibernate.format_sql: false + hibernate.show_sql: false + # hibernate.dialect: org.hibernate.dialect.h2dialect + # hibernate.hbm2ddl.auto: update + # hibernate.jdbc.batch_size: 20 + # hibernate.cache.use_query_cache: false + # hibernate.cache.use_second_level_cache: false + # hibernate.cache.use_structured_entries: false + # hibernate.cache.use_minimal_puts: false + ### These settings will enable fulltext search with lucene + hibernate.search.enabled: true + # hibernate.search.backend.type: lucene + # hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiLuceneAnalysisConfigurer + # hibernate.search.backend.directory.type: local-filesystem + # hibernate.search.backend.directory.root: target/lucenefiles + # hibernate.search.backend.lucene_version: lucene_current + batch: + job: + enabled: false diff --git a/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/STU3_to_R4.fml b/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/STU3_to_R4.fml new file mode 100644 index 0000000..016df02 --- /dev/null +++ b/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/STU3_to_R4.fml @@ -0,0 +1,13 @@ +map "http://hl7.org/fhir/StructureMap/DomainResource3to4" = "R3 to R4 Conversions for DomainResource" + +uses "http://hl7.org/fhir/3.0/StructureDefinition/DomainResource" alias DomainResourceR3 as source +uses "http://hl7.org/fhir/4.0/StructureDefinition/DomainResource" alias DomainResource as target + +//imports "http://hl7.org/fhir/StructureMap/*3to4" + +group DomainResource(source src : DomainResourceR3, target tgt : DomainResource) { + src.status -> tgt.status; + //src.contained -> tgt.contained; + //src.extension -> tgt.extension; + //src.modifierExtension -> tgt.modifierExtension; +} diff --git a/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/extension.fml b/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/extension.fml new file mode 100644 index 0000000..d969303 --- /dev/null +++ b/docker/Transformation-Engine/src/main/resources/fml/MedicationRequest/extension.fml @@ -0,0 +1,25 @@ +map "http://basic.test/medication-request" = "basic-test-medication-request" +uses "http://hl7.org/fhir/StructureDefinition/MedicationRequest" alias MedicationRequest as source +uses "http://hl7.org/fhir/StructureDefinition/MedicationRequest" alias MedicationRequest as target +uses "http://hl7.org/fhir/StructureDefinition/CodeableConcept" alias CodeableConcept as source +uses "http://hl7.org/fhir/StructureDefinition/CodeableConcept" alias CodeableConcept as target +uses "http://hl7.org/fhir/StructureDefinition/Coding" alias Coding as source +uses "http://hl7.org/fhir/StructureDefinition/Coding" alias Coding as target +group MedicationRequest(source src : MedicationRequest, target tgt : MedicationRequest) { + src.extension as ext where $this.url='https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-PrescriptionType-1' + -> tgt.extension as tgtext, tgtext.url='UPDATED DEFINITION HERE' then { + ext.value : CodeableConcept as vs -> tgtext.value = create('CodeableConcept') as vt then CodeableConceptPrescriptionType(vs, vt); + }; + } +group CodeableConceptPrescriptionType(source src : CodeableConcept, target tgt : CodeableConcept) { + // src.coding -> tgt.coding; the short form is only woking when you have a <> + src.coding -> tgt.coding; + src.text as text -> tgt.text = text; +} +group Coding(source src : Coding, target tgt : Coding) <> { + src.system as system where $this='https://fhir.nhs.uk/STU3/CodeSystem/CareConnect-PrescriptionType-1' -> tgt.system = 'UPDATED CODESYSTEM HERE'; + src.version as version -> tgt.version = version; + src.code as code -> tgt.code = code; + src.display as display -> tgt.display = display; + src.userSelected as userSelected -> tgt.userSelected = userSelected; +} diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/controller/ConversionControllerTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/controller/ConversionControllerTest.java index d6953e7..2b684ba 100644 --- a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/controller/ConversionControllerTest.java +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/controller/ConversionControllerTest.java @@ -47,7 +47,7 @@ public void callConverterToConvert_R4_to_R3_json_json() throws Exception { //then assertEquals(responseEntity.getStatusCode(), HttpStatus.OK); - assertEquals(responseEntity.getBody(), staticR3Json); + assertEquals(responseEntity.getBody(), staticR3Json.trim()); } @Test diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/BundleConverterTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/BundleConverterTest.java similarity index 93% rename from docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/BundleConverterTest.java rename to docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/BundleConverterTest.java index 564adb4..ce05e24 100644 --- a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/BundleConverterTest.java +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/BundleConverterTest.java @@ -1,7 +1,6 @@ -package nhsd.fhir.converter.service.transformers; +package nhsd.fhir.converter.service.converter; import ca.uhn.fhir.context.FhirVersionEnum; -import nhsd.fhir.converter.service.converter.BundleConverter; import org.apache.commons.io.FileUtils; import org.custommonkey.xmlunit.XMLAssert; import org.custommonkey.xmlunit.XMLUnit; diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationRequestConverterTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationRequestConverterTest.java similarity index 97% rename from docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationRequestConverterTest.java rename to docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationRequestConverterTest.java index 3d4f4ed..589fc68 100644 --- a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationRequestConverterTest.java +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationRequestConverterTest.java @@ -1,7 +1,6 @@ -package nhsd.fhir.converter.service.transformers; +package nhsd.fhir.converter.service.converter; import ca.uhn.fhir.context.FhirVersionEnum; -import nhsd.fhir.converter.service.converter.MedicationRequestConverter; import org.apache.commons.io.FileUtils; import org.json.JSONException; import org.json.JSONObject; diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationStatementConverterTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationStatementConverterTest.java similarity index 97% rename from docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationStatementConverterTest.java rename to docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationStatementConverterTest.java index a1685a3..86255bf 100644 --- a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/transformers/MedicationStatementConverterTest.java +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/converter/MedicationStatementConverterTest.java @@ -1,7 +1,6 @@ -package nhsd.fhir.converter.service.transformers; +package nhsd.fhir.converter.service.converter; import ca.uhn.fhir.context.FhirVersionEnum; -import nhsd.fhir.converter.service.converter.MedicationStatementConverter; import org.apache.commons.io.FileUtils; import org.json.JSONObject; import org.junit.jupiter.api.BeforeEach; diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterComponentTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterComponentTest.java new file mode 100644 index 0000000..0fc9516 --- /dev/null +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterComponentTest.java @@ -0,0 +1,42 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import nhsd.fhir.converter.service.ConverterTest; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.fail; + +@SpringBootTest +public class ConverterComponentTest { + @Autowired + private ConverterService converterService; + + private static String stu3JsonMedicationRequest; + + @Test + void it_should_convert_json_stu3_medication_request_to_r4() throws ParserConfigurationException, IOException, SAXException { + // When + String m = converterService.convert(stu3JsonMedicationRequest, MediaType.APPLICATION_JSON, FhirVersionEnum.DSTU3); + System.out.println(m); + + + } + + static { + InputStream is = ConverterTest.class.getClassLoader().getResourceAsStream("GPConnect/MedicationRequest_GPConnect.json"); +// InputStream is = ConverterTest.class.getClassLoader().getResourceAsStream("STU3_MedRequest.json"); + try { + stu3JsonMedicationRequest = new String(is.readAllBytes()); + } catch (IOException e) { + fail("Can't open test resource file"); + } + } +} diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterServiceTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterServiceTest.java new file mode 100644 index 0000000..a0ca6e5 --- /dev/null +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterServiceTest.java @@ -0,0 +1,159 @@ +package nhsd.fhir.converter.service.mapping; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; + +import static ca.uhn.fhir.context.FhirVersionEnum.DSTU3; +import static ca.uhn.fhir.context.FhirVersionEnum.R4; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doReturn; + + +@ExtendWith(MockitoExtension.class) +class ConverterServiceTest { + private ConverterService converterService; + + @Mock + private Converter converter; + @Mock + private Transformer transformer; + @Mock + private FhirParser fhirParser; + + private static final String STU3_JSON_RES = "{\"resourceType\": \"MedicationRequest\"}"; + private static final String STU3_XML_RES = ""; + private static final String R4_JSON_RES = "{\"resourceType\": \"MedicationRequest\"}"; + private static final String R4_XML_RES = ""; + + private static final MediaType JSON = MediaType.APPLICATION_JSON; + private static final MediaType XML = MediaType.APPLICATION_XML; + + private static final org.hl7.fhir.dstu3.model.MedicationRequest A_STU3_RES = new org.hl7.fhir.dstu3.model.MedicationRequest(); + private static final org.hl7.fhir.r4.model.MedicationRequest A_R4_RES = new org.hl7.fhir.r4.model.MedicationRequest(); + + private static final org.hl7.fhir.dstu3.model.MedicationRequest A_TRANSFORMED_STU3_RES = new org.hl7.fhir.dstu3.model.MedicationRequest(); + private static final org.hl7.fhir.r4.model.MedicationRequest A_TRANSFORMED_R4_RES = new org.hl7.fhir.r4.model.MedicationRequest(); + + private static final org.hl7.fhir.dstu3.model.MedicationRequest A_CONVERTED_STU3_RES = new org.hl7.fhir.dstu3.model.MedicationRequest(); + private static final org.hl7.fhir.r4.model.MedicationRequest A_CONVERTED_R4_RES = new org.hl7.fhir.r4.model.MedicationRequest(); + + private static final Class STU3_CLASS = org.hl7.fhir.dstu3.model.MedicationRequest.class; + private static final Class R4_CLASS = org.hl7.fhir.r4.model.MedicationRequest.class; + + @BeforeEach + void setUp() { + converterService = new ConverterService(converter, transformer, fhirParser); + } + + @Test + void it_should_convert_stu3_json_resource() throws ParserConfigurationException, IOException, SAXException { + // Given + doReturn(A_STU3_RES) + .when(fhirParser) + .parse(STU3_JSON_RES, STU3_CLASS, JSON); + + doReturn(A_CONVERTED_R4_RES) + .when(converter) + .convert(A_STU3_RES, DSTU3); + + doReturn(A_TRANSFORMED_R4_RES) + .when(transformer) + .transform(A_CONVERTED_R4_RES); + + doReturn(R4_JSON_RES) + .when(fhirParser) + .encode(A_TRANSFORMED_R4_RES, JSON, R4); + + // When + String actualConverted = converterService.convert(STU3_JSON_RES, JSON, DSTU3); + + // Then + assertThat(actualConverted).isEqualTo(R4_JSON_RES); + } + + @Test + void it_should_convert_stu3_xml_resource() throws ParserConfigurationException, IOException, SAXException { + // Given + doReturn(A_STU3_RES) + .when(fhirParser) + .parse(STU3_XML_RES, STU3_CLASS, XML); + + doReturn(A_CONVERTED_R4_RES) + .when(converter) + .convert(A_STU3_RES, DSTU3); + + doReturn(A_TRANSFORMED_R4_RES) + .when(transformer) + .transform(A_CONVERTED_R4_RES); + + doReturn(R4_XML_RES) + .when(fhirParser) + .encode(A_TRANSFORMED_R4_RES, XML, R4); + + // When + String actualConverted = converterService.convert(STU3_XML_RES, XML, DSTU3); + + // Then + assertThat(actualConverted).isEqualTo(R4_XML_RES); + } + + @Test + void it_should_convert_r4_json_resource() throws ParserConfigurationException, IOException, SAXException { + // Given + doReturn(A_R4_RES) + .when(fhirParser) + .parse(R4_JSON_RES, R4_CLASS, JSON); + + doReturn(A_CONVERTED_STU3_RES) + .when(converter) + .convert(A_R4_RES, R4); + + doReturn(A_TRANSFORMED_STU3_RES) + .when(transformer) + .transform(A_CONVERTED_STU3_RES); + + doReturn(STU3_JSON_RES) + .when(fhirParser) + .encode(A_TRANSFORMED_STU3_RES, JSON, DSTU3); + + // When + String actualConverted = converterService.convert(R4_JSON_RES, JSON, R4); + + // Then + assertThat(actualConverted).isEqualTo(STU3_JSON_RES); + } + + @Test + void it_should_convert_r4_xml_resource() throws ParserConfigurationException, IOException, SAXException { + // Given + doReturn(A_R4_RES) + .when(fhirParser) + .parse(R4_XML_RES, R4_CLASS, XML); + + doReturn(A_CONVERTED_STU3_RES) + .when(converter) + .convert(A_R4_RES, R4); + + doReturn(A_TRANSFORMED_STU3_RES) + .when(transformer) + .transform(A_CONVERTED_STU3_RES); + + doReturn(STU3_XML_RES) + .when(fhirParser) + .encode(A_TRANSFORMED_STU3_RES, XML, DSTU3); + + // When + String actualConverted = converterService.convert(R4_XML_RES, XML, R4); + + // Then + assertThat(actualConverted).isEqualTo(STU3_XML_RES); + } +} diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterTest.java new file mode 100644 index 0000000..1083023 --- /dev/null +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ConverterTest.java @@ -0,0 +1,59 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.context.FhirVersionEnum; +import org.hl7.fhir.convertors.conv30_40.VersionConvertor_30_40; +import org.hl7.fhir.dstu3.model.MedicationRequest; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.hl7.fhir.r4.model.Resource; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + + +@RunWith(MockitoJUnitRunner.class) +public class ConverterTest { + @Mock + private VersionConvertor_30_40 fhirConverter; + + private Converter converter; + + private static final IBaseResource STU3_RESOURCE = new MedicationRequest(); + private static final IBaseResource R4_RESOURCE = new org.hl7.fhir.r4.model.MedicationRequest(); + + @Before + public void setUp() throws Exception { + converter = new Converter(fhirConverter); + } + + @Test + public void it_should_convert_stu3_to_r4() { + // Given + when(fhirConverter.convertResource(eq((org.hl7.fhir.dstu3.model.Resource) STU3_RESOURCE))) + .thenReturn((Resource) R4_RESOURCE); + + // When + IBaseResource converted = converter.convert(STU3_RESOURCE, FhirVersionEnum.DSTU3); + + // Then + assertThat((org.hl7.fhir.r4.model.MedicationRequest) converted).isNotNull(); + } + + @Test + public void it_should_convert_r4_to_stu3() { + // Given + when(fhirConverter.convertResource(eq((org.hl7.fhir.r4.model.Resource) R4_RESOURCE))) + .thenReturn((org.hl7.fhir.dstu3.model.Resource) STU3_RESOURCE); + + // When + IBaseResource converted = converter.convert(R4_RESOURCE, FhirVersionEnum.R4); + + // Then + assertThat((org.hl7.fhir.dstu3.model.MedicationRequest) converted).isNotNull(); + } +} diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/FhirParserTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/FhirParserTest.java new file mode 100644 index 0000000..1654125 --- /dev/null +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/FhirParserTest.java @@ -0,0 +1,155 @@ +package nhsd.fhir.converter.service.mapping; + +import ca.uhn.fhir.parser.IParser; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; + +import static ca.uhn.fhir.context.FhirVersionEnum.DSTU3; +import static ca.uhn.fhir.context.FhirVersionEnum.R4; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + + +@ExtendWith(MockitoExtension.class) +class FhirParserTest { + @Mock + private IParser stu3JsonParser; + @Mock + private IParser stu3XmlParser; + @Mock + private IParser r4JsonParser; + @Mock + private IParser r4XmlParser; + + private FhirParser fhirParser; + + private static final MediaType JSON = MediaType.APPLICATION_JSON; + private static final MediaType XML = MediaType.APPLICATION_XML; + + private static final String STU3_JSON_RES = "a stu3 json resource"; + private static final String STU3_XML_RES = "a stu3 xml resource"; + private static final String R4_JSON_RES = "a r4 json resource"; + private static final String R4_XML_RES = "a r4 xml resource"; + + private static final org.hl7.fhir.dstu3.model.MedicationRequest A_STU3_RES = new org.hl7.fhir.dstu3.model.MedicationRequest(); + private static final org.hl7.fhir.r4.model.MedicationRequest A_R4_RES = new org.hl7.fhir.r4.model.MedicationRequest(); + private static final Class STU3_CLASS = org.hl7.fhir.dstu3.model.MedicationRequest.class; + private static final Class R4_CLASS = org.hl7.fhir.r4.model.MedicationRequest.class; + + @BeforeEach + void setUp() { + fhirParser = new FhirParser(stu3JsonParser, r4JsonParser, stu3XmlParser, r4XmlParser); + } + + @Test + void it_should_parse_stu3_json_resource() { + // Given + when(stu3JsonParser.parseResource(STU3_CLASS, STU3_JSON_RES)) + .thenReturn(A_STU3_RES); + + // When + org.hl7.fhir.dstu3.model.MedicationRequest resource = + fhirParser.parse(STU3_JSON_RES, STU3_CLASS, JSON); + + // Then + assertThat(resource).isEqualTo(A_STU3_RES); + } + + @Test + void it_should_encode_stu3_json_resource() { + // Given + when(stu3JsonParser.encodeResourceToString(A_STU3_RES)) + .thenReturn(STU3_JSON_RES); + + // When + String resource = fhirParser.encode(A_STU3_RES, JSON, DSTU3); + + // Then + assertThat(resource).isEqualTo(STU3_JSON_RES); + } + + @Test + void it_should_parse_stu3_xml_resource() { + // Given + when(stu3XmlParser.parseResource(STU3_CLASS, STU3_XML_RES)) + .thenReturn(A_STU3_RES); + + // When + org.hl7.fhir.dstu3.model.MedicationRequest resource = + fhirParser.parse(STU3_XML_RES, STU3_CLASS, XML); + + // Then + assertThat(resource).isEqualTo(A_STU3_RES); + } + + @Test + void it_should_encode_stu3_xml_resource() { + // Given + when(stu3XmlParser.encodeResourceToString(A_STU3_RES)) + .thenReturn(STU3_XML_RES); + + // When + String resource = fhirParser.encode(A_STU3_RES, XML, DSTU3); + + // Then + assertThat(resource).isEqualTo(STU3_XML_RES); + } + + @Test + void it_should_parse_r4_json_resource() { + // Given + when(r4JsonParser.parseResource(R4_CLASS, R4_JSON_RES)) + .thenReturn(A_R4_RES); + + // When + org.hl7.fhir.r4.model.MedicationRequest resource = + fhirParser.parse(R4_JSON_RES, R4_CLASS, JSON); + + // Then + assertThat(resource).isEqualTo(A_R4_RES); + } + + @Test + void it_should_encode_r4_json_resource() { + // Given + when(r4JsonParser.encodeResourceToString(A_R4_RES)) + .thenReturn(R4_JSON_RES); + + // When + String resource = fhirParser.encode(A_R4_RES, JSON, R4); + + // Then + assertThat(resource).isEqualTo(R4_JSON_RES); + } + + @Test + void it_should_parse_r4_xml_resource() { + // Given + when(r4XmlParser.parseResource(R4_CLASS, R4_XML_RES)) + .thenReturn(A_R4_RES); + + // When + org.hl7.fhir.r4.model.MedicationRequest resource = + fhirParser.parse(R4_XML_RES, R4_CLASS, XML); + + // Then + assertThat(resource).isEqualTo(A_R4_RES); + } + + @Test + void it_should_encode_r4_xml_resource() { + // Given + when(r4XmlParser.encodeResourceToString(A_R4_RES)) + .thenReturn(R4_XML_RES); + + // When + String resource = fhirParser.encode(A_R4_RES, XML, R4); + + // Then + assertThat(resource).isEqualTo(R4_XML_RES); + } +} diff --git a/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactoryTest.java b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactoryTest.java new file mode 100644 index 0000000..84d0917 --- /dev/null +++ b/docker/Transformation-Engine/src/test/java/nhsd/fhir/converter/service/mapping/ResourceTypeFactoryTest.java @@ -0,0 +1,91 @@ +package nhsd.fhir.converter.service.mapping; + +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; + +import static ca.uhn.fhir.context.FhirVersionEnum.DSTU3; +import static ca.uhn.fhir.context.FhirVersionEnum.R4; +import static org.assertj.core.api.Assertions.assertThat; + +class ResourceTypeFactoryTest { + private static final String MEDICATION_REQUEST_JSON = "{\"resourceType\": \"MedicationRequest\"}"; + private static final String MEDICATION_REQUEST_XML = ""; + + private static final String MEDICATION_STATEMENT_JSON = "{\"resourceType\": \"MedicationStatement\"}"; + private static final String MEDICATION_STATEMENT_XML = ""; + + private static final MediaType JSON = MediaType.APPLICATION_JSON; + private static final MediaType XML = MediaType.APPLICATION_XML; + + @Test + void it_should_return_stu_medication_request_given_json_input() throws ParserConfigurationException, IOException, SAXException { + // Given + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_REQUEST_JSON, JSON, DSTU3); + + assertThat(resource).isEqualTo(org.hl7.fhir.dstu3.model.MedicationRequest.class); + } + + @Test + void it_should_return_stu3_medication_request_given_xml_input() throws ParserConfigurationException, IOException, SAXException { + // When + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_REQUEST_XML, XML, DSTU3); + + // Then + assertThat(resource).isEqualTo(org.hl7.fhir.dstu3.model.MedicationRequest.class); + } + + @Test + void it_should_return_r4_medication_request_given_json_input() throws ParserConfigurationException, IOException, SAXException { + // Given + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_REQUEST_JSON, JSON, R4); + + assertThat(resource).isEqualTo(org.hl7.fhir.r4.model.MedicationRequest.class); + } + + @Test + void it_should_return_r4_medication_request_given_xml_input() throws ParserConfigurationException, IOException, SAXException { + // When + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_REQUEST_XML, XML, R4); + + // Then + assertThat(resource).isEqualTo(org.hl7.fhir.r4.model.MedicationRequest.class); + } + + @Test + void it_should_return_stu_medication_statement_given_json_input() throws ParserConfigurationException, IOException, SAXException { + // Given + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_STATEMENT_JSON, JSON, DSTU3); + + assertThat(resource).isEqualTo(org.hl7.fhir.dstu3.model.MedicationStatement.class); + } + + @Test + void it_should_return_stu3_medication_statement_given_xml_input() throws ParserConfigurationException, IOException, SAXException { + // When + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_STATEMENT_XML, XML, DSTU3); + + // Then + assertThat(resource).isEqualTo(org.hl7.fhir.dstu3.model.MedicationStatement.class); + } + + @Test + void it_should_return_r4_medication_statement_given_json_input() throws ParserConfigurationException, IOException, SAXException { + // Given + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_STATEMENT_JSON, JSON, R4); + + assertThat(resource).isEqualTo(org.hl7.fhir.r4.model.MedicationStatement.class); + } + + @Test + void it_should_return_r4_medication_statement_given_xml_input() throws ParserConfigurationException, IOException, SAXException { + // When + Class resource = ResourceTypeFactory.createResourceType(MEDICATION_STATEMENT_XML, XML, R4); + + // Then + assertThat(resource).isEqualTo(org.hl7.fhir.r4.model.MedicationStatement.class); + } +} diff --git a/docker/Transformation-Engine/src/test/resources/FML/MedicationRequest_STU3_R4.fml b/docker/Transformation-Engine/src/test/resources/FML/MedicationRequest_STU3_R4.fml new file mode 100644 index 0000000..65d639e --- /dev/null +++ b/docker/Transformation-Engine/src/test/resources/FML/MedicationRequest_STU3_R4.fml @@ -0,0 +1,13 @@ +map "http://hl7.org/fhir/StructureMap/DomainResource3to4" = "R3 to R4 Conversions for DomainResource" + +uses "http://hl7.org/fhir/3.0/StructureDefinition/DomainResource" alias DomainResourceR3 as source +uses "http://hl7.org/fhir/StructureDefinition/DomainResource" alias DomainResource as target + +//imports "http://hl7.org/fhir/StructureMap/*3to4" + +group DomainResource(source src : DomainResourceR3, target tgt : DomainResource) extends Resource <> { + src.text -> tgt.text; + src.contained -> tgt.contained; + src.extension -> tgt.extension; + src.modifierExtension -> tgt.modifierExtension; +} diff --git a/docker/Transformation-Engine/src/test/resources/FML/extension.fml b/docker/Transformation-Engine/src/test/resources/FML/extension.fml new file mode 100644 index 0000000..d969303 --- /dev/null +++ b/docker/Transformation-Engine/src/test/resources/FML/extension.fml @@ -0,0 +1,25 @@ +map "http://basic.test/medication-request" = "basic-test-medication-request" +uses "http://hl7.org/fhir/StructureDefinition/MedicationRequest" alias MedicationRequest as source +uses "http://hl7.org/fhir/StructureDefinition/MedicationRequest" alias MedicationRequest as target +uses "http://hl7.org/fhir/StructureDefinition/CodeableConcept" alias CodeableConcept as source +uses "http://hl7.org/fhir/StructureDefinition/CodeableConcept" alias CodeableConcept as target +uses "http://hl7.org/fhir/StructureDefinition/Coding" alias Coding as source +uses "http://hl7.org/fhir/StructureDefinition/Coding" alias Coding as target +group MedicationRequest(source src : MedicationRequest, target tgt : MedicationRequest) { + src.extension as ext where $this.url='https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-PrescriptionType-1' + -> tgt.extension as tgtext, tgtext.url='UPDATED DEFINITION HERE' then { + ext.value : CodeableConcept as vs -> tgtext.value = create('CodeableConcept') as vt then CodeableConceptPrescriptionType(vs, vt); + }; + } +group CodeableConceptPrescriptionType(source src : CodeableConcept, target tgt : CodeableConcept) { + // src.coding -> tgt.coding; the short form is only woking when you have a <> + src.coding -> tgt.coding; + src.text as text -> tgt.text = text; +} +group Coding(source src : Coding, target tgt : Coding) <> { + src.system as system where $this='https://fhir.nhs.uk/STU3/CodeSystem/CareConnect-PrescriptionType-1' -> tgt.system = 'UPDATED CODESYSTEM HERE'; + src.version as version -> tgt.version = version; + src.code as code -> tgt.code = code; + src.display as display -> tgt.display = display; + src.userSelected as userSelected -> tgt.userSelected = userSelected; +} diff --git a/docker/Transformation-Engine/src/test/resources/GPConnect/MedicationRequest_GPConnect.json b/docker/Transformation-Engine/src/test/resources/GPConnect/MedicationRequest_GPConnect.json new file mode 100644 index 0000000..32f38c8 --- /dev/null +++ b/docker/Transformation-Engine/src/test/resources/GPConnect/MedicationRequest_GPConnect.json @@ -0,0 +1,92 @@ +{ + "resourceType": "MedicationRequest", + "id": "20", + "text": "text to test", + "meta": { + "profile": [ + "https://fhir.nhs.uk/STU3/StructureDefinition/CareConnect-GPC-MedicationRequest-1" + ] + }, + "extension": [ + { + "url": "https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-MedicationRepeatInformation-1", + "extension": [ + { + "url": "numberOfRepeatPrescriptionsAllowed", + "valuePositiveInt": 12 + }, + { + "url": "numberOfRepeatPrescriptionsIssued", + "valuePositiveInt": 11 + } + ] + }, + { + "url": "https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-PrescriptionType-1", + "valueCodeableConcept": { + "coding": [ + { + "system": "https://fhir.nhs.uk/STU3/CodeSystem/CareConnect-PrescriptionType-1", + "code": "repeat", + "display": "Repeat" + } + ] + } + } + ], + "requester": { + "onBehalfOf": { + "reference": "Patient/someone" + } + }, + "identifier": [ + { + "system": "https://fhir.nhs.uk/Id/cross-care-setting-identifier", + "value": "4534a031-e778-11eb-935a-00505692d4aa" + } + ], + "groupIdentifier": { + "value": "M-3" + }, + "status": "active", + "intent": "plan", + "medicationReference": { + "reference": "Medication/20" + }, + "subject": { + "reference": "Patient/2" + }, + "authoredOn": "2017-11-10T00:00:00+00:00", + "recorder": { + "reference": "Practitioner/1" + }, + "dosageInstruction": [ + { + "text": "1 tablet once a day", + "patientInstruction": "Take in morning" + } + ], + "dispenseRequest": { + "validityPeriod": { + "start": "2017-11-10T00:00:00+00:00", + "end": "2018-08-15T00:00:00+01:00" + }, + "quantity": { + "extension": [ + { + "url": "https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-MedicationQuantityText-1", + "valueString": "28" + } + ] + }, + "expectedSupplyDuration": { + "value": 28, + "unit": "day", + "system": "http://unitsofmeasure.org", + "code": "d" + }, + "performer": { + "reference": "Organization/1" + } + } +} diff --git a/docker/Transformation-Engine/src/test/resources/R3_MedicationRequest.xml b/docker/Transformation-Engine/src/test/resources/R3_MedicationRequest.xml index 70f89c4..48ade90 100644 --- a/docker/Transformation-Engine/src/test/resources/R3_MedicationRequest.xml +++ b/docker/Transformation-Engine/src/test/resources/R3_MedicationRequest.xml @@ -1 +1,95 @@ -

Generated Narrative with Details

id: medrx002

identifier: 12345 (OFFICIAL)

status: active

intent: order

medication:prescribed medication

subject:Donald Duck

context:encounter that leads to this prescription

authoredOn: 01/03/2015

Requesters

-AgentOnBehalfOf
*Patrick PumpOrganization/f002

reasonCode: Essential hypertension (disorder)(Details : {SNOMED CT code '59621000' = 'Essential hypertension', given as 'Essential hypertension (disorder)'})

dosageInstruction:

\ No newline at end of file + + + + +
+

+ Generated Narrative with Details +

+

id: medrx002 +

+

identifier: 12345 (OFFICIAL) +

+

status: active +

+

intent: order +

+

medication: + prescribed medication +

+

subject: + Donald Duck +

+

context: + encounter that leads to this prescription +

+

authoredOn: 01/03/2015 +

+

Requesters

+ + + + + + + + + + + +
- + Agent + + OnBehalfOf +
* + Patrick Pump + + Organization/f002 +
+

reasonCode: Essential hypertension (disorder) + (Details : {SNOMED CT code '59621000' = 'Essential hypertension', given as 'Essential hypertension + (disorder)'}) + +

+

dosageInstruction: +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docker/Transformation-Engine/src/test/resources/STU3_MedRequest.json b/docker/Transformation-Engine/src/test/resources/STU3_MedRequest.json index b6d22c9..317df64 100644 --- a/docker/Transformation-Engine/src/test/resources/STU3_MedRequest.json +++ b/docker/Transformation-Engine/src/test/resources/STU3_MedRequest.json @@ -1 +1,61 @@ -{"resourceType":"MedicationRequest","id":"medrx002","text":{"status":"generated","div":"

Generated Narrative with Details

id: medrx002

identifier: 12345 (OFFICIAL)

status: active

intent: order

medication: prescribed medication

subject: Donald Duck

context: encounter that leads to this prescription

authoredOn: 01/03/2015

Requesters

-AgentOnBehalfOf
*Patrick PumpOrganization/f002

reasonCode: Essential hypertension (disorder) (Details : {SNOMED CT code '59621000' = 'Essential hypertension', given as 'Essential hypertension (disorder)'})

dosageInstruction:

"},"extension":[{"url":"http://hl7.org/fhir/3.0/StructureDefinition/extension-MedicationRequest.requester.onBehalfOf","valueReference":{"reference":"Organization/f002"}}],"identifier":[{"use":"official","system":"http://www.bmc.nl/portal/prescriptions","value":"12345"}],"status":"active","intent":"order","medicationReference":{"reference":"Medication/med0316","display":"prescribed medication"},"subject":{"reference":"Patient/pat1","display":"Donald Duck"},"context":{"reference":"Encounter/f001","display":"encounter that leads to this prescription"},"authoredOn":"2015-03-01","requester":{"agent":{"reference":"Practitioner/f007","display":"Patrick Pump"}},"reasonCode":[{"coding":[{"system":"http://snomed.info/sct","code":"59621000","display":"Essential hypertension (disorder)"}]}],"dosageInstruction":[{"sequence":1,"text":"Take one tablet daily as directed"}]} \ No newline at end of file +{ + "resourceType": "MedicationRequest", + "id": "medrx002", + "text": { + "status": "generated", + "div": "

Generated Narrative with Details

id: medrx002

identifier: 12345 (OFFICIAL)

status: active

intent: order

medication: prescribed medication

subject: Donald Duck

context: encounter that leads to this prescription

authoredOn: 01/03/2015

Requesters

-AgentOnBehalfOf
*Patrick PumpOrganization/f002

reasonCode: Essential hypertension (disorder) (Details : {SNOMED CT code '59621000' = 'Essential hypertension', given as 'Essential hypertension (disorder)'})

dosageInstruction:

" + }, + "extension": [ + { + "url": "http://hl7.org/fhir/3.0/StructureDefinition/extension-MedicationRequest.requester.onBehalfOf", + "valueReference": { + "reference": "Organization/f002" + } + } + ], + "identifier": [ + { + "use": "official", + "system": "http://www.bmc.nl/portal/prescriptions", + "value": "12345" + } + ], + "status": "active", + "intent": "order", + "medicationReference": { + "reference": "Medication/med0316", + "display": "prescribed medication" + }, + "subject": { + "reference": "Patient/pat1", + "display": "Donald Duck" + }, + "context": { + "reference": "Encounter/f001", + "display": "encounter that leads to this prescription" + }, + "authoredOn": "2015-03-01", + "requester": { + "agent": { + "reference": "Practitioner/f007", + "display": "Patrick Pump" + } + }, + "reasonCode": [ + { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "59621000", + "display": "Essential hypertension (disorder)" + } + ] + } + ], + "dosageInstruction": [ + { + "sequence": 1, + "text": "Take one tablet daily as directed" + } + ] +}