diff --git a/README.md b/README.md index 7f760522..6c4bfa48 100644 --- a/README.md +++ b/README.md @@ -121,17 +121,14 @@ networks: - issue an NutsOrganizationCredential for the subject's DIDs from the subject's DIDs - use https://admin.right.local and add "1" as identity - issue an NutsOrganizationCredential for the subject's DIDs from the subject's DIDs -- enable services for discovery -- add services to the DID document using curl statement from below +- activate services for discovery using curl statement from below - create `customers.json` files for demo-ehr config - wait curl statement to add services to DID document: ```shell -docker exec nuts-demo-ehr-node-left-1 curl -X POST "http://localhost:8081/internal/vdr/v2/subject/1/service" -H "Content-Type: application/json" -d '{"type": "eOverdracht-sender","serviceEndpoint": {"auth": "https://node.left.local/oauth2/1","fhir": "https://left.local/fhir/1"}}' -docker exec nuts-demo-ehr-node-left-1 curl -X POST "http://localhost:8081/internal/vdr/v2/subject/1/service" -H "Content-Type: application/json" -d '{"type": "eOverdracht-receiver","serviceEndpoint": {"auth": "https://node.left.local/oauth2/1","notification": "https://left.local/web/external/transfer/notify"}}' -docker exec nuts-demo-ehr-node-right-1 curl -X POST "http://localhost:8081/internal/vdr/v2/subject/1/service" -H "Content-Type: application/json" -d '{"type": "eOverdracht-sender","serviceEndpoint": {"auth": "https://node.right.local/oauth2/1","fhir": "https://right.local/fhir/1"}}' -docker exec nuts-demo-ehr-node-right-1 curl -X POST "http://localhost:8081/internal/vdr/v2/subject/1/service" -H "Content-Type: application/json" -d '{"type": "eOverdracht-receiver","serviceEndpoint": {"auth": "https://node.right.local/oauth2/1","notification": "https://right.local/web/external/transfer/notify"}}' +docker exec nuts-demo-ehr-node-left-1 curl -X POST "http://localhost:8081/internal/discovery/v1/urn:nuts.nl:usecase:eOverdrachtDemo2024/1" -H "Content-Type: application/json" -d '{"registrationParameters": {"fhir": "https://left.local/fhir/1", "notification":"https://left.local/web/external/transfer/notify"}}' +docker exec nuts-demo-ehr-node-right-1 curl -X POST "http://localhost:8081/internal/discovery/v1/urn:nuts.nl:usecase:eOverdrachtDemo2024/1" -H "Content-Type: application/json" -d '{"registrationParameters": {"fhir": "https://right.local/fhir/1", "notification":"https://right.local/web/external/transfer/notify"}}' ``` ### Run diff --git a/api/api.yaml b/api/api.yaml index 83a0694f..f2bd9d33 100644 --- a/api/api.yaml +++ b/api/api.yaml @@ -876,14 +876,14 @@ components: type: object required: - episodeID - - organizationDID + - organizationID - organizationName properties: id: $ref: '#/components/schemas/ObjectID' episodeID: $ref: '#/components/schemas/ObjectID' - organizationDID: + organizationID: type: string description: The DID of the collaborator organizationName: @@ -1035,10 +1035,10 @@ components: description: An request object to create a new transfer negotiation. type: object required: - - organizationDID + - organizationID - transferDate properties: - organizationDID: + organizationID: description: Decentralized Identifier of the organization to which transfer of a patient is requested. type: string transferDate: @@ -1064,7 +1064,7 @@ components: required: - id - transferID - - organizationDID + - organizationID - organization - taskID - transferDate @@ -1073,7 +1073,7 @@ components: $ref: '#/components/schemas/ObjectID' transferID: $ref: '#/components/schemas/ObjectID' - organizationDID: + organizationID: description: Decentralized Identifier of the organization to which transfer of a patient is requested. type: string taskID: diff --git a/api/registry.go b/api/registry.go index 324f2b1c..ac91859d 100644 --- a/api/registry.go +++ b/api/registry.go @@ -18,7 +18,7 @@ func (w Wrapper) SearchOrganizations(ctx echo.Context) error { if err := ctx.Bind(&request); err != nil { return echo.NewHTTPError(http.StatusBadRequest, err) } - organizations, err := w.NutsClient.SearchDiscoveryService(ctx.Request().Context(), request.Query, request.DiscoveryServiceID, request.DidServiceType) + organizations, err := w.NutsClient.SearchDiscoveryService(ctx.Request().Context(), request.Query, request.DiscoveryServiceID) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, err) } diff --git a/api/transfer.go b/api/transfer.go index 57879e70..f06348f6 100644 --- a/api/transfer.go +++ b/api/transfer.go @@ -131,7 +131,7 @@ func (w Wrapper) StartTransferNegotiation(ctx echo.Context, transferID string) e if err != nil { return err } - negotiation, err := w.TransferSenderService.CreateNegotiation(ctx.Request().Context(), cid, transferID, request.OrganizationDID) + negotiation, err := w.TransferSenderService.CreateNegotiation(ctx.Request().Context(), cid, transferID, request.OrganizationID) if err != nil { return err } @@ -143,11 +143,11 @@ func (w Wrapper) AssignTransferDirect(ctx echo.Context, transferID string) error if err := ctx.Bind(&request); err != nil { return err } - cid, err := w.getCustomerID(ctx) + customer, err := w.getCustomer(ctx) if err != nil { return err } - _, err = w.TransferSenderService.AssignTransfer(ctx.Request().Context(), cid, transferID, request.OrganizationDID) + _, err = w.TransferSenderService.AssignTransfer(ctx.Request().Context(), *customer, transferID, request.OrganizationID) if err != nil { return err } @@ -165,9 +165,9 @@ func (w Wrapper) ListTransferNegotiations(ctx echo.Context, transferID string) e } // Enrich with organization info for i, negotiation := range negotiations { - organization, err := w.OrganizationRegistry.Get(ctx.Request().Context(), negotiation.OrganizationDID) + organization, err := w.OrganizationRegistry.Get(ctx.Request().Context(), negotiation.OrganizationID) if err != nil { - logrus.Warnf("Error while fetching organization info for negotiation (DID=%s): %v", negotiation.OrganizationDID, err) + logrus.Warnf("Error while fetching organization info for negotiation (DID=%s): %v", negotiation.OrganizationID, err) continue } negotiations[i].Organization = types.FromNutsOrganization(*organization) @@ -228,7 +228,6 @@ func (w Wrapper) NotifyTransferUpdate(ctx echo.Context, taskID string) error { issuerURLStr := target["iss"].(string) // get senderDID via custom policy param senderClientID := target["client_id"].(string) - senderDID := target["organization_did"].(string) // we need the subjectID, which is at the end of the path, not panic safe issuerURL, _ := url.Parse(issuerURLStr) idx := strings.LastIndex(issuerURL.Path, "/") @@ -281,7 +280,7 @@ func (w Wrapper) NotifyTransferUpdate(ctx echo.Context, taskID string) error { if err := w.NotificationHandler.Handle(ctx.Request().Context(), notification.Notification{ TaskID: taskID, - SenderDID: senderDID, + SenderID: senderClientID, CustomerID: customerID, }); err != nil { return err diff --git a/docker-compose/left/config/demo/customers.json b/docker-compose/left/config/demo/customers.json index 89973334..81a29828 100644 --- a/docker-compose/left/config/demo/customers.json +++ b/docker-compose/left/config/demo/customers.json @@ -1,3 +1,3 @@ { - "1":{"active":false,"city":"Enske","domain":"","id":"1","name":"Left"} + "1":{"active":false,"city":"Enske","domain":"https://nuts.left.local","id":"1","name":"Left"} } diff --git a/docker-compose/left/config/node/discovery/eOverdracht.json b/docker-compose/left/config/node/discovery/eOverdracht.json index 607c306d..6de7f019 100644 --- a/docker-compose/left/config/node/discovery/eOverdracht.json +++ b/docker-compose/left/config/node/discovery/eOverdracht.json @@ -73,6 +73,32 @@ } ] } + }, + { + "id": "id_registration_cred", + "constraints": { + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "string", + "const": "DiscoveryRegistrationCredential" + } + }, + { + "id": "fhir endpoint", + "path": [ + "$.credentialSubject.fhir", + "$.credentialSubject[0].fhir" + ], + "filter": { + "type": "string" + } + } + ] + } } ] } diff --git a/docker-compose/left/config/node/nuts.yaml b/docker-compose/left/config/node/nuts.yaml index 1f7c9846..a28d731a 100644 --- a/docker-compose/left/config/node/nuts.yaml +++ b/docker-compose/left/config/node/nuts.yaml @@ -17,7 +17,7 @@ discovery: definitions: directory: /nuts/discovery client: - refresh_interval: 1m + refresh_interval: 10m server: ids: - urn:nuts.nl:usecase:eOverdrachtDemo2024 diff --git a/docker-compose/left/data/hapi/database/h2.mv.db b/docker-compose/left/data/hapi/database/h2.mv.db index 11b5d0d3..eba0dd07 100644 Binary files a/docker-compose/left/data/hapi/database/h2.mv.db and b/docker-compose/left/data/hapi/database/h2.mv.db differ diff --git a/docker-compose/right/config/demo/customers.json b/docker-compose/right/config/demo/customers.json index 694ad81a..7fabf5a5 100644 --- a/docker-compose/right/config/demo/customers.json +++ b/docker-compose/right/config/demo/customers.json @@ -1,3 +1,3 @@ { - "1":{"active":false,"city":"Enske","domain":"","id":"1","name":"Right"} + "1":{"active":false,"city":"Enske","domain":"https://nuts.right.local","id":"1","name":"Right"} } diff --git a/docker-compose/right/config/node/discovery/eOverdracht.json b/docker-compose/right/config/node/discovery/eOverdracht.json index 607c306d..6de7f019 100644 --- a/docker-compose/right/config/node/discovery/eOverdracht.json +++ b/docker-compose/right/config/node/discovery/eOverdracht.json @@ -73,6 +73,32 @@ } ] } + }, + { + "id": "id_registration_cred", + "constraints": { + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "string", + "const": "DiscoveryRegistrationCredential" + } + }, + { + "id": "fhir endpoint", + "path": [ + "$.credentialSubject.fhir", + "$.credentialSubject[0].fhir" + ], + "filter": { + "type": "string" + } + } + ] + } } ] } diff --git a/docker-compose/right/config/node/nuts.yaml b/docker-compose/right/config/node/nuts.yaml index f5756b52..3c88c0bc 100644 --- a/docker-compose/right/config/node/nuts.yaml +++ b/docker-compose/right/config/node/nuts.yaml @@ -17,7 +17,7 @@ discovery: definitions: directory: /nuts/discovery client: - refresh_interval: 1m + refresh_interval: 10m vdr: didmethods: - web diff --git a/docker-compose/right/data/hapi/database/h2.mv.db b/docker-compose/right/data/hapi/database/h2.mv.db index 7c551241..7bfa7add 100644 Binary files a/docker-compose/right/data/hapi/database/h2.mv.db and b/docker-compose/right/data/hapi/database/h2.mv.db differ diff --git a/docker-compose/right/data/hapi/database/h2.trace.db b/docker-compose/right/data/hapi/database/h2.trace.db index f8a8c9b9..716f29a4 100644 --- a/docker-compose/right/data/hapi/database/h2.trace.db +++ b/docker-compose/right/data/hapi/database/h2.trace.db @@ -4194,3 +4194,1935 @@ org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed ( 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) +2024-09-11 10:04:58 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$2bc53c9e.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:04:58 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$2bc53c9e.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:04:58 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$2bc53c9e.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:04:58 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$2bc53c9e.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:04:58 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$2bc53c9e.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 10:15:45 jdbc[9]: 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.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$14e5dbdb.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 11:47:33 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$b73b825b.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 11:47:33 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$b73b825b.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 11:47:33 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$b73b825b.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 11:47:33 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$b73b825b.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 11:47:33 jdbc[6]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$b73b825b.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:06:10 jdbc[9]: 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.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.$Proxy168.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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:06:10 jdbc[9]: 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.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.$Proxy168.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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:06:10 jdbc[9]: 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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:06:10 jdbc[9]: 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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:06:10 jdbc[9]: 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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:06:10 jdbc[9]: 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.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$$6df5d008.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$$3dd10c06.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) +2024-09-11 12:36:50 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$854628ca.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$1b8bff76.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$1b8bff76.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$1b8bff76.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$1b8bff76.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:36:50 jdbc[9]: 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.bulk.export.svc.BulkDataExportSvcImpl.buildExportFiles(BulkDataExportSvcImpl.java:143) + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$$FastClassBySpringCGLIB$$87387b51.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.bulk.export.svc.BulkDataExportSvcImpl$$EnhancerBySpringCGLIB$$1b8bff76.buildExportFiles() + at ca.uhn.fhir.jpa.bulk.export.svc.BulkDataExportSvcImpl$Job.execute(BulkDataExportSvcImpl.java:549) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.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$CollectionExecution.doExecute(JpaQueryExecution.java:126) + 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.$Proxy208.findAll(Unknown Source) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.lambda$expungeJobsMarkedAsDeleted$8(ResourceReindexingSvcImpl.java:423) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) +2024-09-11 12:54:03 jdbc[9]: 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.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:168) + at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:144) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.expungeJobsMarkedAsDeleted(ResourceReindexingSvcImpl.java:422) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.doReindexingPassInsideLock(ResourceReindexingSvcImpl.java:241) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl.runReindexingPass(ResourceReindexingSvcImpl.java:232) + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$$FastClassBySpringCGLIB$$f3ca5ded.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.reindex.ResourceReindexingSvcImpl$$EnhancerBySpringCGLIB$$3f2ca739.runReindexingPass() + at ca.uhn.fhir.jpa.search.reindex.ResourceReindexingSvcImpl$Job.execute(ResourceReindexingSvcImpl.java:215) + at org.quartz.core.JobRunShell.run(JobRunShell.java:202) + at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) diff --git a/domain/episode/service.go b/domain/episode/service.go index c67df73a..50b96a48 100644 --- a/domain/episode/service.go +++ b/domain/episode/service.go @@ -139,13 +139,13 @@ func (service *service) GetCollaborations(ctx context.Context, customerDID, doss logrus.WithError(err).Warn("Error looking up episode collaborator organization") collaborations = append(collaborations, types.Collaboration{ EpisodeID: episodeID, - OrganizationDID: authorizedDID, + OrganizationID: authorizedDID, OrganizationName: "!ERROR! " + err.Error(), }) } else { collaborations = append(collaborations, types.Collaboration{ EpisodeID: episodeID, - OrganizationDID: authorizedDID, + OrganizationID: authorizedDID, OrganizationName: org.Details.Name, }) } diff --git a/domain/fhir/eoverdracht/service.go b/domain/fhir/eoverdracht/service.go index da633892..5201c737 100644 --- a/domain/fhir/eoverdracht/service.go +++ b/domain/fhir/eoverdracht/service.go @@ -132,9 +132,9 @@ func (s transferService) GetTask(ctx context.Context, taskID string) (*TransferT } task := &TransferTask{ - ID: fhir.FromIDPtr(fhirTask.ID), - Status: fhir.FromCodePtr(fhirTask.Status), - ReceiverDID: fhir.FromStringPtr(fhirTask.Owner.Identifier.Value), + ID: fhir.FromIDPtr(fhirTask.ID), + Status: fhir.FromCodePtr(fhirTask.Status), + ReceiverID: fhir.FromStringPtr(fhirTask.Owner.Identifier.Value), } if input := s.findTaskInputOutputByCode(fhirTask.Input, LoincAdvanceNoticeCode); input != nil { diff --git a/domain/fhir/eoverdracht/types.go b/domain/fhir/eoverdracht/types.go index 2a320133..6886e6a9 100644 --- a/domain/fhir/eoverdracht/types.go +++ b/domain/fhir/eoverdracht/types.go @@ -9,7 +9,7 @@ import ( type TransferTask struct { ID string Status string - ReceiverDID string + ReceiverID string AdvanceNoticeID *string NursingHandoffID *string } diff --git a/domain/notification/handler.go b/domain/notification/handler.go index c2f121af..30ae3dcf 100644 --- a/domain/notification/handler.go +++ b/domain/notification/handler.go @@ -14,7 +14,7 @@ import ( type Notification struct { TaskID string - SenderDID string + SenderID string CustomerID string } @@ -45,18 +45,18 @@ func NewHandler( // Handle handles an incoming notification about an updated Task for one of its customers. func (service *handler) Handle(ctx context.Context, notification Notification) error { - fhirServer, err := service.registry.GetCompoundServiceEndpoint(ctx, notification.SenderDID, transfer.SenderServiceName, "fhir") + fhirServer, err := service.registry.GetCompoundServiceEndpoint(ctx, notification.SenderID, transfer.ServiceName, "fhir") if err != nil { - return fmt.Errorf("error while looking up custodian's FHIR server (did=%s): %w", notification.SenderDID, err) + return fmt.Errorf("error while looking up custodian's FHIR server (did=%s): %w", notification.SenderID, err) } - authServer, err := service.registry.GetCompoundServiceEndpoint(ctx, notification.SenderDID, transfer.SenderServiceName, "auth") + authServer, err := service.registry.GetCompoundServiceEndpoint(ctx, notification.SenderID, transfer.ServiceName, "authServerURL") if err != nil { - return fmt.Errorf("error while looking up custodian's Auth server (did=%s): %w", notification.SenderDID, err) + return fmt.Errorf("error while looking up custodian's Auth server (did=%s): %w", notification.SenderID, err) } taskPath := fmt.Sprintf("/Task/%s", notification.TaskID) - accessToken, err := service.nutsClient.RequestServiceAccessToken(ctx, notification.CustomerID, authServer, "eOverdracht-sender") + accessToken, err := service.nutsClient.RequestServiceAccessToken(ctx, notification.CustomerID, authServer, transfer.SenderServiceScope) if err != nil { return err } @@ -70,5 +70,5 @@ func (service *handler) Handle(ctx context.Context, notification Notification) e return err } - return service.transferService.CreateOrUpdate(ctx, fhir.FromCodePtr(task.Status), notification.CustomerID, notification.SenderDID, fhir.FromIDPtr(task.ID)) + return service.transferService.CreateOrUpdate(ctx, fhir.FromCodePtr(task.Status), notification.CustomerID, notification.SenderID, fhir.FromIDPtr(task.ID)) } diff --git a/domain/transfer/receiver/service.go b/domain/transfer/receiver/service.go index 90931f06..44e7c06d 100644 --- a/domain/transfer/receiver/service.go +++ b/domain/transfer/receiver/service.go @@ -155,29 +155,29 @@ func (s service) GetTransferRequest(ctx context.Context, customerID, requesterDI return &transferRequest, nil } -func (s service) getServiceFHIRClient(ctx context.Context, authorizerDID string, localRequesterSubjectID string) (fhir.Client, error) { - fhirServer, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerDID, transfer.SenderServiceName, "fhir") +func (s service) getServiceFHIRClient(ctx context.Context, authorizerID string, localRequesterSubjectID string) (fhir.Client, error) { + fhirServer, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerID, transfer.ServiceName, "fhir") if err != nil { - return nil, fmt.Errorf("error while looking up authorizer's FHIR server (did=%s): %w", authorizerDID, err) + return nil, fmt.Errorf("error while looking up authorizer's FHIR server (did=%s): %w", authorizerID, err) } - authServerURL, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerDID, transfer.SenderServiceName, "auth") + authServerURL, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerID, transfer.ServiceName, "authServerURL") if err != nil { - return nil, fmt.Errorf("error while looking up authorizer's auth server (did=%s): %w", authorizerDID, err) + return nil, fmt.Errorf("error while looking up authorizer's auth server (did=%s): %w", authorizerID, err) } // TODO: This should be the user access token instead when medical data is involved, // but this depends on the scope mapping which then has to change for v6 - accessToken, err := s.nutsClient.RequestServiceAccessToken(ctx, localRequesterSubjectID, authServerURL, transfer.SenderServiceName) + accessToken, err := s.nutsClient.RequestServiceAccessToken(ctx, localRequesterSubjectID, authServerURL, transfer.SenderServiceScope) if err != nil { return nil, err } return fhir.NewFactory(fhir.WithURL(fhirServer), fhir.WithAuthToken(accessToken))(), nil } -func (s service) getUserFHIRClient(ctx context.Context, authorizerDID string, localRequesterDID string, accessToken string) (fhir.Client, error) { - fhirServer, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerDID, transfer.SenderServiceName, "fhir") +func (s service) getUserFHIRClient(ctx context.Context, authorizerID string, localRequesterDID string, accessToken string) (fhir.Client, error) { + fhirServer, err := s.registry.GetCompoundServiceEndpoint(ctx, authorizerID, transfer.ServiceName, "fhir") if err != nil { - return nil, fmt.Errorf("error while looking up authorizer's FHIR server (did=%s): %w", authorizerDID, err) + return nil, fmt.Errorf("error while looking up authorizer's FHIR server (id=%s): %w", authorizerID, err) } return fhir.NewFactory(fhir.WithURL(fhirServer), fhir.WithAuthToken(accessToken))(), nil diff --git a/domain/transfer/sender/repository.go b/domain/transfer/sender/repository.go index 46c9d937..976acf70 100644 --- a/domain/transfer/sender/repository.go +++ b/domain/transfer/sender/repository.go @@ -27,7 +27,7 @@ type TransferRepository interface { // The status will be set to REQUESTED_STATE. // It fails when their exists another domain.TransferNegotiation for this transfer with the same organisationDID and // a status other than CANCELLED_STATE. - CreateNegotiation(ctx context.Context, customerID, transferID, organizationDID string, transferDate time.Time, taskID string) (*types.TransferNegotiation, error) + CreateNegotiation(ctx context.Context, customerID, transferID, organizationID string, transferDate time.Time, taskID string) (*types.TransferNegotiation, error) // ProposeAlternateDate updates the date on the domain.TransferNegotiation indicated by the negotiationID. // It updates the status to ON_HOLD_STATE diff --git a/domain/transfer/sender/service.go b/domain/transfer/sender/service.go index febe9c67..cb9e3240 100644 --- a/domain/transfer/sender/service.go +++ b/domain/transfer/sender/service.go @@ -24,12 +24,12 @@ import ( type TransferService interface { // AssignTransfer assigns a transfer directly to a single organization - AssignTransfer(ctx context.Context, customerID, transferID, organizationDID string) (*types.TransferNegotiation, error) + AssignTransfer(ctx context.Context, customer types.Customer, transferID, organizationID string) (*types.TransferNegotiation, error) // CreateTransfer creates a new transfer CreateTransfer(ctx context.Context, customerID string, request types.CreateTransferRequest) (*types.Transfer, error) - CreateNegotiation(ctx context.Context, customerID, transferID, organizationDID string) (*types.TransferNegotiation, error) + CreateNegotiation(ctx context.Context, customerID, transferID, organizationID string) (*types.TransferNegotiation, error) GetTransferByID(ctx context.Context, customerID, transferID string) (types.Transfer, error) @@ -132,7 +132,7 @@ func (s service) GetTransferByID(ctx context.Context, customerID, transferID str } // CreateNegotiation creates a new negotiation(FHIR Task) for a specific transfer and sends the other party a notification. -func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, organizationDID string) (*types.TransferNegotiation, error) { +func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, organizationID string) (*types.TransferNegotiation, error) { customer, err := s.customerRepo.FindByID(customerID) if err != nil { return nil, err @@ -140,13 +140,6 @@ func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, var negotiation *types.TransferNegotiation - // Pre-emptively resolve the receiver organization's notification endpoint to check registry configuration. - // This reduces cleanup code of FHIR task. - _, err = s.registry.GetCompoundServiceEndpoint(ctx, organizationDID, transfer.ReceiverServiceName, "notification") - if err != nil { - return nil, fmt.Errorf("unable to create transfer negotiation: no notification endpoint found: %w", err) - } - fhirClient := s.localFHIRClientFactory(fhir.WithTenant(customerID)) fhirTransferService := eoverdracht.NewFHIRTransferService(fhirClient) @@ -168,7 +161,7 @@ func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, transferTask := eoverdracht.TransferTask{ Status: transfer.RequestedState, - ReceiverDID: organizationDID, + ReceiverID: organizationID, AdvanceNoticeID: &dbTransfer.FhirAdvanceNoticeComposition, } @@ -191,11 +184,11 @@ func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, for _, path := range resourcePaths { authorizedResources[path] = []string{"GET"} } - if err := s.pipClient.AddPIPData(transferTask.ID, organizationDID, transfer.SenderServiceName, customer.Id, authorizedResources); err != nil { + if err := s.pipClient.AddPIPData(transferTask.ID, organizationID, transfer.SenderServiceScope, *customer, authorizedResources); err != nil { return nil, fmt.Errorf("could not create PIP data: %w", err) } - negotiation, err = s.transferRepo.CreateNegotiation(ctx, customerID, transferID, organizationDID, dbTransfer.TransferDate.Time, transferTask.ID) + negotiation, err = s.transferRepo.CreateNegotiation(ctx, customerID, transferID, organizationID, dbTransfer.TransferDate.Time, transferTask.ID) if err != nil { return nil, err } @@ -211,9 +204,9 @@ func (s service) CreateNegotiation(ctx context.Context, customerID, transferID, return negotiation, commitErr } - if err = s.sendNotification(ctx, customer, organizationDID, negotiation.TaskID); err != nil { + if err = s.sendNotification(ctx, customer, organizationID, negotiation.TaskID); err != nil { // TODO: What to do here? Should we maybe rollback? - logrus.Errorf("Unable to notify receiving care organization of updated FHIR task (did=%s): %s", organizationDID, err) + logrus.Errorf("Unable to notify receiving care organization of updated FHIR task (id=%s): %s", organizationID, err) } } @@ -339,13 +332,13 @@ func (s service) ConfirmNegotiation(ctx context.Context, customerID, transferID, processedPaths[path] = struct{}{} } - if err := s.pipClient.AddPIPData(negotiation.TaskID, negotiation.OrganizationDID, transfer.SenderServiceName, customer.Id, authorizedResources); err != nil { + if err := s.pipClient.AddPIPData(negotiation.TaskID, negotiation.OrganizationID, transfer.SenderServiceScope, *customer, authorizedResources); err != nil { return nil, fmt.Errorf("could not create PIP data: %w", err) } notifications = append(notifications, ¬ification{ - customer: customer, - organizationDID: negotiation.OrganizationDID, + customer: customer, + organizationID: negotiation.OrganizationID, }) return dbTransfer, nil @@ -359,9 +352,9 @@ func (s service) ConfirmNegotiation(ctx context.Context, customerID, transferID, var errs []string for _, n := range notifications { - err = s.sendNotification(ctx, n.customer, n.organizationDID, negotiation.TaskID) + err = s.sendNotification(ctx, n.customer, n.organizationID, negotiation.TaskID) if err != nil { - errs = append(errs, fmt.Errorf("sending to %s: %w", n.organizationDID, err).Error()) + errs = append(errs, fmt.Errorf("sending to %s: %w", n.organizationID, err).Error()) } } if len(errs) > 0 { @@ -389,7 +382,7 @@ func (s service) CancelNegotiation(ctx context.Context, customerID, transferID, return nil, err } - return negotiation, s.sendNotification(ctx, notification.customer, notification.organizationDID, negotiation.TaskID) + return negotiation, s.sendNotification(ctx, notification.customer, notification.organizationID, negotiation.TaskID) } func (s service) UpdateTaskState(ctx context.Context, customer types.Customer, taskID string, newState string) error { @@ -431,8 +424,8 @@ func (s service) acceptTask(ctx context.Context, customer types.Customer, negoti // create notification not := notification{ - customer: &customer, - organizationDID: negotiation.OrganizationDID, + customer: &customer, + organizationID: negotiation.OrganizationID, } // Commit here, otherwise notifications to this server will deadlock on the uncommitted tx. @@ -441,7 +434,7 @@ func (s service) acceptTask(ctx context.Context, customer types.Customer, negoti return commitErr } - _ = s.sendNotification(ctx, not.customer, not.organizationDID, negotiation.TaskID) + _ = s.sendNotification(ctx, not.customer, not.organizationID, negotiation.TaskID) return nil } @@ -475,8 +468,8 @@ func (s service) completeTask(ctx context.Context, customer types.Customer, nego // create notification not = notification{ - customer: &customer, - organizationDID: negotiation.OrganizationDID, + customer: &customer, + organizationID: negotiation.OrganizationID, } return transferRecord, nil @@ -488,15 +481,15 @@ func (s service) completeTask(ctx context.Context, customer types.Customer, nego return commitErr } - _ = s.sendNotification(ctx, not.customer, not.organizationDID, negotiation.TaskID) + _ = s.sendNotification(ctx, not.customer, not.organizationID, negotiation.TaskID) } return err } type notification struct { - customer *types.Customer - organizationDID string + customer *types.Customer + organizationID string } // cancelNegotiation is like CancelNegotiation but it doesn't send any notification. @@ -524,20 +517,20 @@ func (s service) cancelNegotiation(ctx context.Context, customerID, negotiationI if err != nil { return nil, nil, err } - return negotiation, ¬ification{customer: customer, organizationDID: negotiation.OrganizationDID}, nil + return negotiation, ¬ification{customer: customer, organizationID: negotiation.OrganizationID}, nil } -func (s service) sendNotification(ctx context.Context, customer *types.Customer, organizationDID string, fhirTaskID string) error { - notificationEndpoint, err := s.registry.GetCompoundServiceEndpoint(ctx, organizationDID, transfer.ReceiverServiceName, "notification") +func (s service) sendNotification(ctx context.Context, customer *types.Customer, organizationID string, fhirTaskID string) error { + notificationEndpoint, err := s.registry.GetCompoundServiceEndpoint(ctx, organizationID, transfer.ServiceName, "notification") if err != nil { return err } - authServerEndpoint, err := s.registry.GetCompoundServiceEndpoint(ctx, organizationDID, transfer.ReceiverServiceName, "auth") + authServerEndpoint, err := s.registry.GetCompoundServiceEndpoint(ctx, organizationID, transfer.ServiceName, "authServerURL") if err != nil { return err } - tokenResponse, err := s.nutsClient.RequestServiceAccessToken(ctx, customer.Id, authServerEndpoint, transfer.ReceiverServiceName) + tokenResponse, err := s.nutsClient.RequestServiceAccessToken(ctx, customer.Id, authServerEndpoint, transfer.ReceiverServiceScope) if err != nil { return err } @@ -579,26 +572,14 @@ func (s service) findPatientByDossierID(ctx context.Context, customerID, dossier return patient, nil } -func (s service) AssignTransfer(ctx context.Context, customerID, transferID, organizationDID string) (*types.TransferNegotiation, error) { - customer, err := s.customerRepo.FindByID(customerID) - if err != nil { - return nil, err - } - +func (s service) AssignTransfer(ctx context.Context, customer types.Customer, transferID, organizationID string) (*types.TransferNegotiation, error) { var negotiation *types.TransferNegotiation - // Pre-emptively resolve the receiver organization's notification endpoint to check registry configuration. - // This reduces cleanup code of FHIR task. - _, err = s.registry.GetCompoundServiceEndpoint(ctx, organizationDID, transfer.ReceiverServiceName, "notification") - if err != nil { - return nil, fmt.Errorf("unable to create transfer negotiation: no notification endpoint found: %w", err) - } - - fhirClient := s.localFHIRClientFactory(fhir.WithTenant(customerID)) + fhirClient := s.localFHIRClientFactory(fhir.WithTenant(customer.Id)) fhirTransferService := eoverdracht.NewFHIRTransferService(fhirClient) // Update the transfer - _, err = s.transferRepo.Update(ctx, customerID, transferID, func(dbTransfer *types.Transfer) (*types.Transfer, error) { + _, err := s.transferRepo.Update(ctx, customer.Id, transferID, func(dbTransfer *types.Transfer) (*types.Transfer, error) { // Validate if transfer is in correct state to allow new negotiations if dbTransfer.Status == types.Cancelled || dbTransfer.Status == types.Completed || @@ -611,16 +592,16 @@ func (s service) AssignTransfer(ctx context.Context, customerID, transferID, org // it has to be updated to a NursingHandoff compositionPath := fmt.Sprintf("/Composition/%s", dbTransfer.FhirAdvanceNoticeComposition) composition := fhir.Composition{} - err = fhirClient.ReadOne(ctx, compositionPath, &composition) + err := fhirClient.ReadOne(ctx, compositionPath, &composition) if err != nil { return nil, fmt.Errorf("could not assign transfer negotiation: could not read fhir compositition: %w", err) } - nursingHandoffComposition, err := s.advanceNoticeToNursingHandoff(ctx, customerID, dbTransfer) + nursingHandoffComposition, err := s.advanceNoticeToNursingHandoff(ctx, customer.Id, dbTransfer) if err != nil { return nil, fmt.Errorf("could not assign transfer negotiation: failed to upgrade AdvanceNotice to NursingHandoff: %w", err) } // Save nursing handoff composition in the FHIR store - if err = s.localFHIRClientFactory(fhir.WithTenant(customerID)).CreateOrUpdate(ctx, nursingHandoffComposition, nil); err != nil { + if err = s.localFHIRClientFactory(fhir.WithTenant(customer.Id)).CreateOrUpdate(ctx, nursingHandoffComposition, nil); err != nil { return nil, err } dbTransfer.FhirNursingHandoffComposition = (*string)(nursingHandoffComposition.ID) @@ -628,7 +609,7 @@ func (s service) AssignTransfer(ctx context.Context, customerID, transferID, org // create the FHIR task with the Nurse Handoff transferTask := eoverdracht.TransferTask{ Status: transfer.InProgressState, - ReceiverDID: organizationDID, + ReceiverID: organizationID, NursingHandoffID: dbTransfer.FhirNursingHandoffComposition, } @@ -638,15 +619,15 @@ func (s service) AssignTransfer(ctx context.Context, customerID, transferID, org } // store auth in pip - if err := s.createAuthorizations(ctx, &transferTask, nursingHandoffComposition, organizationDID, customerID); err != nil { + if err := s.createAuthorizations(ctx, &transferTask, nursingHandoffComposition, organizationID, customer); err != nil { return nil, err } - negotiation, err = s.transferRepo.CreateNegotiation(ctx, customerID, transferID, organizationDID, dbTransfer.TransferDate.Time, transferTask.ID) + negotiation, err = s.transferRepo.CreateNegotiation(ctx, customer.Id, transferID, organizationID, dbTransfer.TransferDate.Time, transferTask.ID) if err != nil { return nil, err } - _, err = s.transferRepo.UpdateNegotiationState(ctx, customerID, negotiation.Id, transfer.InProgressState) + _, err = s.transferRepo.UpdateNegotiationState(ctx, customer.Id, negotiation.Id, transfer.InProgressState) if err != nil { return nil, err } @@ -660,9 +641,9 @@ func (s service) AssignTransfer(ctx context.Context, customerID, transferID, org return negotiation, commitErr } - if err = s.sendNotification(ctx, customer, organizationDID, negotiation.TaskID); err != nil { + if err = s.sendNotification(ctx, &customer, organizationID, negotiation.TaskID); err != nil { // TODO: What to do here? Should we maybe rollback? - logrus.Errorf("Unable to notify receiving care organization of updated FHIR task (did=%s): %s", organizationDID, err) + logrus.Errorf("Unable to notify receiving care organization of updated FHIR task (did=%s): %s", organizationID, err) } } @@ -670,8 +651,8 @@ func (s service) AssignTransfer(ctx context.Context, customerID, transferID, org } // createAuthorizations creates 2 authorization credentials, one for the Task, and one for the nursingHandoffComposition. -func (s service) createAuthorizations(ctx context.Context, transferTask *eoverdracht.TransferTask, nursingHandoffComposition *fhir.Composition, organizationDID, customerID string) error { - prefix := fmt.Sprintf("/fhir/%d", customerID) +func (s service) createAuthorizations(ctx context.Context, transferTask *eoverdracht.TransferTask, nursingHandoffComposition *fhir.Composition, organizationID string, customer types.Customer) error { + prefix := fmt.Sprintf("/fhir/%d", customer.Id) // Build the list of resources for the authorization credential: authorizedResources := s.resourcesForNursingHandoff(nursingHandoffComposition) authorizedResources[fmt.Sprintf("/Task/%s", transferTask.ID)] = []string{"GET", "PUT"} @@ -683,7 +664,7 @@ func (s service) createAuthorizations(ctx context.Context, transferTask *eoverdr delete(authorizedResources, path) } } - if err := s.pipClient.AddPIPData(transferTask.ID, organizationDID, transfer.SenderServiceName, customerID, authorizedResources); err != nil { + if err := s.pipClient.AddPIPData(transferTask.ID, organizationID, transfer.SenderServiceScope, customer, authorizedResources); err != nil { return fmt.Errorf("could not create PIP data: %w", err) } return nil diff --git a/domain/transfer/sender/sql_repository.go b/domain/transfer/sender/sql_repository.go index 93e5df48..73d1df89 100644 --- a/domain/transfer/sender/sql_repository.go +++ b/domain/transfer/sender/sql_repository.go @@ -30,7 +30,7 @@ type sqlTransfer struct { type sqlNegotiation struct { ID string `db:"id"` TransferID string `db:"transfer_id"` - OrganizationDID string `db:"organization_did"` + OrganizationID string `db:"organization_id"` CustomerID string `db:"customer_id"` Date time.Time `db:"date"` Status string `db:"status"` @@ -40,7 +40,7 @@ type sqlNegotiation struct { func (dbNegotiation sqlNegotiation) MarshalToDomainNegotiation() (*types.TransferNegotiation, error) { return &types.TransferNegotiation{ Id: dbNegotiation.ID, - OrganizationDID: dbNegotiation.OrganizationDID, + OrganizationID: dbNegotiation.OrganizationID, Status: types.FHIRTaskStatus(dbNegotiation.Status), TransferDate: openapiTypes.Date{Time: dbNegotiation.Date}, TransferID: dbNegotiation.TransferID, @@ -52,7 +52,7 @@ func (dbNegotiation *sqlNegotiation) UnmarshalFromDomainNegotiation(customerID s *dbNegotiation = sqlNegotiation{ ID: string(negotiation.Id), TransferID: string(negotiation.TransferID), - OrganizationDID: negotiation.OrganizationDID, + OrganizationID: negotiation.OrganizationID, CustomerID: customerID, Date: negotiation.TransferDate.Time, Status: string(negotiation.Status), @@ -140,7 +140,7 @@ const transferSchema = ` const negotiationSchema = ` CREATE TABLE IF NOT EXISTS transfer_negotiation ( id char(36) NOT NULL, - organization_did varchar(200) NOT NULL, + organization_id varchar(200) NOT NULL, transfer_id char(36) NOT NULL, customer_id VARCHAR(255) NOT NULL, date DATETIME DEFAULT NULL, @@ -434,7 +434,7 @@ func (r SQLiteTransferRepository) updateNegotiation(ctx context.Context, tx *sql return nil } -func (r SQLiteTransferRepository) CreateNegotiation(ctx context.Context, customerID string, transferID, organizationDID string, transferDate time.Time, taskID string) (*types.TransferNegotiation, error) { +func (r SQLiteTransferRepository) CreateNegotiation(ctx context.Context, customerID string, transferID, organizationID string, transferDate time.Time, taskID string) (*types.TransferNegotiation, error) { tx, err := sqlUtil.GetTransaction(ctx) if err != nil { return nil, err @@ -443,7 +443,7 @@ func (r SQLiteTransferRepository) CreateNegotiation(ctx context.Context, custome negotiation := sqlNegotiation{ ID: uuid.NewString(), TransferID: transferID, - OrganizationDID: organizationDID, + OrganizationID: organizationID, CustomerID: customerID, Date: transferDate, Status: transfer.RequestedState, @@ -451,8 +451,8 @@ func (r SQLiteTransferRepository) CreateNegotiation(ctx context.Context, custome } const query = `INSERT INTO transfer_negotiation - (id, transfer_id, organization_did, customer_id, date, status, task_id) - values(:id, :transfer_id, :organization_did, :customer_id, :date, :status, :task_id)` + (id, transfer_id, organization_id, customer_id, date, status, task_id) + values(:id, :transfer_id, :organization_id, :customer_id, :date, :status, :task_id)` if _, err := tx.NamedExecContext(ctx, query, negotiation); err != nil { return nil, err @@ -462,7 +462,7 @@ func (r SQLiteTransferRepository) CreateNegotiation(ctx context.Context, custome } func (r SQLiteTransferRepository) ListNegotiations(ctx context.Context, customerID string, transferID string) ([]types.TransferNegotiation, error) { - const query = `SELECT * FROM transfer_negotiation WHERE customer_id = ? AND transfer_id = ? ORDER BY organization_did ASC` + const query = `SELECT * FROM transfer_negotiation WHERE customer_id = ? AND transfer_id = ? ORDER BY organization_id ASC` tx, err := sqlUtil.GetTransaction(ctx) if err != nil { return nil, err diff --git a/domain/transfer/service.go b/domain/transfer/service.go index 1f78bb21..809efc7c 100644 --- a/domain/transfer/service.go +++ b/domain/transfer/service.go @@ -1,7 +1,7 @@ package transfer -// ReceiverServiceName contains the name of the eOverdracht receiver compound-service -const ReceiverServiceName = "eOverdracht-receiver" +// ServiceName contains the name of the eOverdracht discovery service +const ServiceName = "urn:nuts.nl:usecase:eOverdrachtDemo2024" -// SenderServiceName contains the name of the eOverdracht sender compound-service -const SenderServiceName = "eOverdracht-sender" +const SenderServiceScope = "eOverdracht-sender" +const ReceiverServiceScope = "eOverdracht-receiver" diff --git a/domain/types/generated_types.go b/domain/types/generated_types.go index d24fc247..a8110b7c 100644 --- a/domain/types/generated_types.go +++ b/domain/types/generated_types.go @@ -79,8 +79,8 @@ type Collaboration struct { // Id An internal object UUID which can be used as unique identifier for entities. Id *ObjectID `json:"id,omitempty"` - // OrganizationDID The DID of the collaborator - OrganizationDID string `json:"organizationDID"` + // OrganizationID The DID of the collaborator + OrganizationID string `json:"organizationID"` // OrganizationName The name of the collaborator OrganizationName string `json:"organizationName"` @@ -118,8 +118,8 @@ type CreateEpisodeRequest struct { // CreateTransferNegotiationRequest An request object to create a new transfer negotiation. type CreateTransferNegotiationRequest struct { - // OrganizationDID Decentralized Identifier of the organization to which transfer of a patient is requested. - OrganizationDID string `json:"organizationDID"` + // OrganizationID Decentralized Identifier of the organization to which transfer of a patient is requested. + OrganizationID string `json:"organizationID"` // TransferDate Transfer date subject of the negotiation. Can be altered by both sending and receiving care organization. TransferDate openapi_types.Date `json:"transferDate"` @@ -415,8 +415,8 @@ type TransferNegotiation struct { // Organization A care organization available through the Nuts Network to exchange information. Organization Organization `json:"organization"` - // OrganizationDID Decentralized Identifier of the organization to which transfer of a patient is requested. - OrganizationDID string `json:"organizationDID"` + // OrganizationID Decentralized Identifier of the organization to which transfer of a patient is requested. + OrganizationID string `json:"organizationID"` // Status Status of the negotiation, maps to FHIR eOverdracht task states (https://informatiestandaarden.nictiz.nl/wiki/vpk:V4.0_FHIR_eOverdracht#Using_Task_to_manage_the_workflow). Status FHIRTaskStatus `json:"status"` diff --git a/domain/zorginzage.go b/domain/zorginzage.go index a64ee612..a1453051 100644 --- a/domain/zorginzage.go +++ b/domain/zorginzage.go @@ -56,19 +56,10 @@ func (z ZorginzageService) RemotePatient(ctx context.Context, subjectDID, remote } func (z ZorginzageService) fhirClient(ctx context.Context, localDID string, remotePartyDID string, scope string, serviceName string) (fhir.Client, error) { - endpointsInterf, err := z.NutsClient.ResolveServiceEndpoint(ctx, remotePartyDID, serviceName, "object") + fhirEndpoint, err := z.NutsClient.ResolveServiceEndpoint(ctx, remotePartyDID, serviceName, "fhir") if err != nil { return nil, fmt.Errorf("resolve DID service (DID=%s, service=%s): %w", remotePartyDID, serviceName, err) } - endpoints := endpointsInterf.(map[string]interface{}) - fhirEndpointInterf := endpoints["fhir"] - if fhirEndpointInterf == nil { - return nil, fmt.Errorf("remote XIS does not have its FHIR endpoint registered (DID=%s)", remotePartyDID) - } - fhirEndpoint, ok := fhirEndpointInterf.(string) - if !ok { - return nil, fmt.Errorf("FHIR endpoint is not a string (DID=%s)", remotePartyDID) - } accessToken, err := z.NutsClient.RequestServiceAccessToken(ctx, localDID, remotePartyDID, scope) if err != nil { return nil, fmt.Errorf("unable to get access token (DID=%s,scope=%s): %w", remotePartyDID, scope, err) diff --git a/nuts/client/discovery.go b/nuts/client/discovery.go index 639c2fb6..3c2ced3c 100644 --- a/nuts/client/discovery.go +++ b/nuts/client/discovery.go @@ -19,14 +19,15 @@ var _ Discovery = (*HTTPClient)(nil) // DiscoverySearchResult models a single result for when searching on Discovery Services. type DiscoverySearchResult struct { nuts.NutsOrganization - ServiceID string `json:"service_id"` + ServiceID string `json:"service_id"` + Parameters map[string]interface{} `json:"parameters"` } type Discovery interface { - SearchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID *string, didServiceType *string) ([]DiscoverySearchResult, error) + SearchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID *string) ([]DiscoverySearchResult, error) } -func (c HTTPClient) SearchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID *string, didServiceType *string) ([]DiscoverySearchResult, error) { +func (c HTTPClient) SearchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID *string) ([]DiscoverySearchResult, error) { ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() @@ -43,16 +44,16 @@ func (c HTTPClient) SearchDiscoveryService(ctx context.Context, query map[string } searchResults := make([]DiscoverySearchResult, 0) for _, serviceID := range serviceIDs { - currResults, err := c.searchDiscoveryService(ctx, query, serviceID, didServiceType) + currResults, err := c.searchDiscoveryService(ctx, query, serviceID) if err != nil { - return nil, fmt.Errorf("failed to get service participants for %s, %s: %w", serviceID, *didServiceType, err) + return nil, fmt.Errorf("failed to get service participants for %s: %w", serviceID, err) } searchResults = append(searchResults, currResults...) } return searchResults, nil } -func (c HTTPClient) searchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID string, didServiceType *string) ([]DiscoverySearchResult, error) { +func (c HTTPClient) searchDiscoveryService(ctx context.Context, query map[string]string, discoveryServiceID string) ([]DiscoverySearchResult, error) { queryAsMap := make(map[string]interface{}, 0) for key, value := range query { queryAsMap[key] = value @@ -82,27 +83,10 @@ func (c HTTPClient) searchDiscoveryService(ctx context.Context, query map[string // resolve all DIDs from .subjectId and filter on given didServiceType if given results := make([]DiscoverySearchResult, 0) for _, searchResult := range response { - if didServiceType != nil { - // parse did and convert did:web to url - doc, err := c.resolveDID(ctx, searchResult.CredentialSubjectId) - if err != nil { - return nil, fmt.Errorf("failed to resolve DID %s: %w", searchResult.CredentialSubjectId, err) - } - // check if the didServiceType is in the service array - serviceFound := false - for _, service := range doc.Service { - if service.Type == *didServiceType { - serviceFound = true - break - } - } - if !serviceFound { - continue - } - } results = append(results, DiscoverySearchResult{ NutsOrganization: organizationSearchResultToDomain(searchResult), ServiceID: discoveryServiceID, + Parameters: searchResult.Parameters, }) } return results, nil @@ -165,7 +149,7 @@ func (c HTTPClient) resolveDID(ctx context.Context, didStr string) (*did.Documen func organizationSearchResultToDomain(searchResult nutsDiscoveryClient.SearchResult) nuts.NutsOrganization { return nuts.NutsOrganization{ - ID: searchResult.CredentialSubjectId, + ID: searchResult.Parameters["authServerURL"].(string), Details: nuts.OrganizationDetails{ Name: searchResult.Fields["organization_name"].(string), City: searchResult.Fields["organization_city"].(string), diff --git a/nuts/client/discovery/generated.go b/nuts/client/discovery/generated.go index ae0d9276..a54ae46b 100644 --- a/nuts/client/discovery/generated.go +++ b/nuts/client/discovery/generated.go @@ -27,7 +27,7 @@ type SearchResult struct { // Fields Input descriptor IDs and their mapped values that from the Verifiable Credential. Fields map[string]interface{} `json:"fields"` - + Parameters map[string]interface{} `json:"registrationParameters"` // Id The ID of the Verifiable Presentation. Id string `json:"id"` Vp VerifiablePresentation `json:"vp"` @@ -53,7 +53,7 @@ type VerifiablePresentation = externalRef0.VerifiablePresentation // SearchPresentationsParams defines parameters for SearchPresentations. type SearchPresentationsParams struct { - Query *map[string]string `form:"query,omitempty" json:"query,omitempty"` + Query *map[string]interface{} `form:"query,omitempty" json:"query,omitempty"` } // RequestEditorFn is the function signature for the RequestEditor callback function diff --git a/nuts/client/vdr.go b/nuts/client/vdr.go index 60cf333a..a12efaa6 100644 --- a/nuts/client/vdr.go +++ b/nuts/client/vdr.go @@ -3,32 +3,29 @@ package client import ( "context" "errors" + "github.com/nuts-foundation/nuts-demo-ehr/nuts/client/discovery" "github.com/nuts-foundation/nuts-demo-ehr/nuts/client/vdr_v2" "net/http" ) -func (c HTTPClient) ResolveServiceEndpoint(ctx context.Context, verifierDID string, serviceType string, endpointType string) (interface{}, error) { - // resolve DID - response, err := c.vdr().ResolveDID(ctx, verifierDID) +func (c HTTPClient) ResolveServiceEndpoint(ctx context.Context, verifierID string, serviceType string, endpointType string) (string, error) { + // search on discovery service where credentialSubject.authServerURL == verifierID + response, err := c.discovery().SearchPresentations(ctx, serviceType, &discovery.SearchPresentationsParams{Query: &map[string]interface{}{"credentialSubject.authServerURL": verifierID}}) if err != nil { return "", err } if err = testResponseCode(http.StatusOK, response); err != nil { return "", err } - resolveReponse, err := vdr_v2.ParseResolveDIDResponse(response) + searchReponse, err := discovery.ParseSearchPresentationsResponse(response) if err != nil { return "", err } - didDocument := resolveReponse.JSON200.Document + searchResults := searchReponse.JSON200 // find service - for _, service := range didDocument.Service { - if service.Type == serviceType { - serviceDef := make(map[string]interface{}) - if err := service.UnmarshalServiceEndpoint(&serviceDef); err != nil { - return "", err - } - return serviceDef[endpointType], nil + for _, service := range *searchResults { + if value, ok := service.Parameters[endpointType]; ok { + return value.(string), nil } } diff --git a/nuts/client/vdr_v2/generated.go b/nuts/client/vdr_v2/generated.go index d4427345..626b6433 100644 --- a/nuts/client/vdr_v2/generated.go +++ b/nuts/client/vdr_v2/generated.go @@ -185,12 +185,12 @@ type ClientInterface interface { // GetTenantWebDID request GetTenantWebDID(ctx context.Context, id string, reqEditors ...RequestEditorFn) (*http.Response, error) - // ListDIDs request - ListDIDs(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) - // ResolveDID request ResolveDID(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*http.Response, error) + // ListSubjects request + ListSubjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) + // CreateDIDWithBody request with any body CreateDIDWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -248,8 +248,8 @@ func (c *Client) GetTenantWebDID(ctx context.Context, id string, reqEditors ...R return c.Client.Do(req) } -func (c *Client) ListDIDs(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewListDIDsRequest(c.Server) +func (c *Client) ResolveDID(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewResolveDIDRequest(c.Server, did) if err != nil { return nil, err } @@ -260,8 +260,8 @@ func (c *Client) ListDIDs(ctx context.Context, reqEditors ...RequestEditorFn) (* return c.Client.Do(req) } -func (c *Client) ResolveDID(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewResolveDIDRequest(c.Server, did) +func (c *Client) ListSubjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewListSubjectsRequest(c.Server) if err != nil { return nil, err } @@ -477,16 +477,20 @@ func NewGetTenantWebDIDRequest(server string, id string) (*http.Request, error) return req, nil } -// NewListDIDsRequest generates requests for ListDIDs -func NewListDIDsRequest(server string) (*http.Request, error) { +// NewResolveDIDRequest generates requests for ResolveDID +func NewResolveDIDRequest(server string, did string) (*http.Request, error) { var err error + var pathParam0 string + + pathParam0 = did + serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/internal/vdr/v2/did") + operationPath := fmt.Sprintf("/internal/vdr/v2/did/%s", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -504,20 +508,16 @@ func NewListDIDsRequest(server string) (*http.Request, error) { return req, nil } -// NewResolveDIDRequest generates requests for ResolveDID -func NewResolveDIDRequest(server string, did string) (*http.Request, error) { +// NewListSubjectsRequest generates requests for ListSubjects +func NewListSubjectsRequest(server string) (*http.Request, error) { var err error - var pathParam0 string - - pathParam0 = did - serverURL, err := url.Parse(server) if err != nil { return nil, err } - operationPath := fmt.Sprintf("/internal/vdr/v2/did/%s", pathParam0) + operationPath := fmt.Sprintf("/internal/vdr/v2/subject") if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -926,12 +926,12 @@ type ClientWithResponsesInterface interface { // GetTenantWebDIDWithResponse request GetTenantWebDIDWithResponse(ctx context.Context, id string, reqEditors ...RequestEditorFn) (*GetTenantWebDIDResponse, error) - // ListDIDsWithResponse request - ListDIDsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*ListDIDsResponse, error) - // ResolveDIDWithResponse request ResolveDIDWithResponse(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*ResolveDIDResponse, error) + // ListSubjectsWithResponse request + ListSubjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*ListSubjectsResponse, error) + // CreateDIDWithBodyWithResponse request with any body CreateDIDWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreateDIDResponse, error) @@ -1009,10 +1009,10 @@ func (r GetTenantWebDIDResponse) StatusCode() int { return 0 } -type ListDIDsResponse struct { +type ResolveDIDResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *[]string + JSON200 *DIDResolutionResult ApplicationproblemJSONDefault *struct { // Detail A human-readable explanation specific to this occurrence of the problem. Detail string `json:"detail"` @@ -1026,7 +1026,7 @@ type ListDIDsResponse struct { } // Status returns HTTPResponse.Status -func (r ListDIDsResponse) Status() string { +func (r ResolveDIDResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -1034,17 +1034,17 @@ func (r ListDIDsResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r ListDIDsResponse) StatusCode() int { +func (r ResolveDIDResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type ResolveDIDResponse struct { +type ListSubjectsResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *DIDResolutionResult + JSON200 *map[string][]string ApplicationproblemJSONDefault *struct { // Detail A human-readable explanation specific to this occurrence of the problem. Detail string `json:"detail"` @@ -1058,7 +1058,7 @@ type ResolveDIDResponse struct { } // Status returns HTTPResponse.Status -func (r ResolveDIDResponse) Status() string { +func (r ListSubjectsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -1066,7 +1066,7 @@ func (r ResolveDIDResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r ResolveDIDResponse) StatusCode() int { +func (r ListSubjectsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -1345,22 +1345,22 @@ func (c *ClientWithResponses) GetTenantWebDIDWithResponse(ctx context.Context, i return ParseGetTenantWebDIDResponse(rsp) } -// ListDIDsWithResponse request returning *ListDIDsResponse -func (c *ClientWithResponses) ListDIDsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*ListDIDsResponse, error) { - rsp, err := c.ListDIDs(ctx, reqEditors...) +// ResolveDIDWithResponse request returning *ResolveDIDResponse +func (c *ClientWithResponses) ResolveDIDWithResponse(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*ResolveDIDResponse, error) { + rsp, err := c.ResolveDID(ctx, did, reqEditors...) if err != nil { return nil, err } - return ParseListDIDsResponse(rsp) + return ParseResolveDIDResponse(rsp) } -// ResolveDIDWithResponse request returning *ResolveDIDResponse -func (c *ClientWithResponses) ResolveDIDWithResponse(ctx context.Context, did string, reqEditors ...RequestEditorFn) (*ResolveDIDResponse, error) { - rsp, err := c.ResolveDID(ctx, did, reqEditors...) +// ListSubjectsWithResponse request returning *ListSubjectsResponse +func (c *ClientWithResponses) ListSubjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*ListSubjectsResponse, error) { + rsp, err := c.ListSubjects(ctx, reqEditors...) if err != nil { return nil, err } - return ParseResolveDIDResponse(rsp) + return ParseListSubjectsResponse(rsp) } // CreateDIDWithBodyWithResponse request with arbitrary body returning *CreateDIDResponse @@ -1519,22 +1519,22 @@ func ParseGetTenantWebDIDResponse(rsp *http.Response) (*GetTenantWebDIDResponse, return response, nil } -// ParseListDIDsResponse parses an HTTP response from a ListDIDsWithResponse call -func ParseListDIDsResponse(rsp *http.Response) (*ListDIDsResponse, error) { +// ParseResolveDIDResponse parses an HTTP response from a ResolveDIDWithResponse call +func ParseResolveDIDResponse(rsp *http.Response) (*ResolveDIDResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &ListDIDsResponse{ + response := &ResolveDIDResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest []string + var dest DIDResolutionResult if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -1561,22 +1561,22 @@ func ParseListDIDsResponse(rsp *http.Response) (*ListDIDsResponse, error) { return response, nil } -// ParseResolveDIDResponse parses an HTTP response from a ResolveDIDWithResponse call -func ParseResolveDIDResponse(rsp *http.Response) (*ResolveDIDResponse, error) { +// ParseListSubjectsResponse parses an HTTP response from a ListSubjectsWithResponse call +func ParseListSubjectsResponse(rsp *http.Response) (*ListSubjectsResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &ResolveDIDResponse{ + response := &ListSubjectsResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest DIDResolutionResult + var dest map[string][]string if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } diff --git a/nuts/registry/organizations.go b/nuts/registry/organizations.go index 34198cd9..b14b3615 100644 --- a/nuts/registry/organizations.go +++ b/nuts/registry/organizations.go @@ -14,8 +14,8 @@ import ( const cacheMaxAge = 10 * time.Second type OrganizationRegistry interface { - Get(ctx context.Context, organizationDID string) (*nuts.NutsOrganization, error) - GetCompoundServiceEndpoint(ctx context.Context, organizationDID, serviceType string, field string) (string, error) + Get(ctx context.Context, organizationID string) (*nuts.NutsOrganization, error) + GetCompoundServiceEndpoint(ctx context.Context, organizationID, serviceType string, field string) (string, error) } func NewOrganizationRegistry(client *client.HTTPClient) OrganizationRegistry { @@ -37,15 +37,15 @@ type entry struct { writeTime time.Time } -func (r remoteOrganizationRegistry) Get(ctx context.Context, organizationDID string) (*nuts.NutsOrganization, error) { - cached := r.fromCache(organizationDID) +func (r remoteOrganizationRegistry) Get(ctx context.Context, organizationID string) (*nuts.NutsOrganization, error) { + cached := r.fromCache(organizationID) if cached != nil { return cached, nil } searchResults, err := r.client.SearchDiscoveryService(ctx, map[string]string{ - "credentialSubject.id": organizationDID, - }, nil, nil) + "credentialSubject.authServerURL": organizationID, + }, nil) if err != nil { return nil, err } @@ -64,18 +64,18 @@ func (r remoteOrganizationRegistry) Get(ctx context.Context, organizationDID str return nil, errors.New("multiple organizations found (not supported yet)") } if len(results) == 0 { - return nil, fmt.Errorf("organization not found on any Discovery Service: %s", organizationDID) + return nil, fmt.Errorf("organization not found on any Discovery Service: %s", organizationID) } r.toCache(results[0]) return &results[0], nil } -func (r remoteOrganizationRegistry) GetCompoundServiceEndpoint(ctx context.Context, organizationDID, serviceType string, field string) (string, error) { - endpoint, err := r.client.ResolveServiceEndpoint(ctx, organizationDID, serviceType, field) +func (r remoteOrganizationRegistry) GetCompoundServiceEndpoint(ctx context.Context, organizationID, serviceType string, field string) (string, error) { + endpoint, err := r.client.ResolveServiceEndpoint(ctx, organizationID, serviceType, field) if err != nil { return "", err } - return endpoint.(string), nil + return endpoint, nil } func (r remoteOrganizationRegistry) toCache(organizations ...nuts.NutsOrganization) { @@ -89,10 +89,10 @@ func (r remoteOrganizationRegistry) toCache(organizations ...nuts.NutsOrganizati } } -func (r remoteOrganizationRegistry) fromCache(organizationDID string) *nuts.NutsOrganization { +func (r remoteOrganizationRegistry) fromCache(organizationID string) *nuts.NutsOrganization { r.cacheMux.Lock() defer r.cacheMux.Unlock() - if cached, ok := r.cache[organizationDID]; ok && time.Now().Before(cached.writeTime.Add(cacheMaxAge)) { + if cached, ok := r.cache[organizationID]; ok && time.Now().Before(cached.writeTime.Add(cacheMaxAge)) { return &cached.organization } return nil diff --git a/nutspxp/client/pip.go b/nutspxp/client/pip.go index e6b96585..4e45ff67 100644 --- a/nutspxp/client/pip.go +++ b/nutspxp/client/pip.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/nuts-foundation/nuts-demo-ehr/domain/types" "github.com/nuts-foundation/nuts-demo-ehr/nutspxp/client/pip" "io" "net/http" @@ -11,7 +12,7 @@ import ( ) type Client interface { - AddPIPData(id string, client string, scope string, verifier string, authInput map[string]interface{}) error + AddPIPData(id string, client string, scope string, customer types.Customer, authInput map[string]interface{}) error DeletePIPData(id string) error } @@ -21,15 +22,17 @@ type HTTPClient struct { var _ Client = HTTPClient{} -func (c HTTPClient) AddPIPData(id string, client string, scope string, verifier string, authInput map[string]interface{}) error { +func (c HTTPClient) AddPIPData(id string, client string, scope string, customer types.Customer, authInput map[string]interface{}) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() + verifierID := fmt.Sprintf("%s/oauth2/%s", customer.Domain, customer.Id) + resp, err := c.client().CreateData(ctx, id, pip.CreateDataJSONRequestBody{ AuthInput: authInput, ClientId: client, Scope: scope, - VerifierId: verifier, + VerifierId: verifierID, }) if err != nil { return err diff --git a/web/src/ehr/transfer/EditTransfer.vue b/web/src/ehr/transfer/EditTransfer.vue index 3327e5e6..9c8cada8 100644 --- a/web/src/ehr/transfer/EditTransfer.vue +++ b/web/src/ehr/transfer/EditTransfer.vue @@ -19,7 +19,7 @@ {{ negotiation.organization.name }} - {{ negotiation.organizationDID }} + {{ negotiation.organizationID }} {{ negotiation.transferDate }} @@ -186,7 +186,7 @@ export default { }; this.$api.assignTransferDirect(negotiation, { - organizationDID: this.requestedOrganization.did + organizationID: this.requestedOrganization.did }) .then(() => { this.requestedOrganization = null @@ -207,7 +207,7 @@ export default { }; this.$api.startTransferNegotiation(negotiation, { - organizationDID: this.requestedOrganization.did + organizationID: this.requestedOrganization.did }) .then(() => { this.requestedOrganization = null