diff --git a/.gitignore b/.gitignore index 94a12a5..eb206f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -enterprise.txt +license.mattermost ## Ignoring keycloak so it can be pulled already setup. -!volumes/keycloak/* volumes + +.DS_Store \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d77509e --- /dev/null +++ b/Makefile @@ -0,0 +1,51 @@ +.PHONY: stop start check_mattermost + +docker_follow_logs: + @echo "Following logs..." + @docker compose logs --follow + @echo "Done" + + +check_mattermost: + +setup-mattermost: + @./scripts/mattermost.sh setup + +backup-keycloak: + @./scripts/keycloak.sh backup + +restore-keycloak: + @./scripts/keycloak.sh restore + +start: + @echo "Starting..." + @make restore-keycloak + @docker compose up -d + @make setup-mattermost + +stop: + @echo "Stopping..." + @docker compose down + @echo "Done" + +restart: + @docker compose restart + +reset: + @echo "Resetting..." + @make delete-data + @make start + +delete-dockerfiles: + @echo "Deleting data..." + @docker compose rm + @rm -rf ./volumes + @echo "Done" + +delete-data: stop delete-dockerfiles + +nuke: + @echo "Nuking Docker..." + @docker compose down --rmi all --volumes --remove-orphans + @make delete-data + diff --git a/docker-compose.yml b/docker-compose.yml index 6a5405a..52f3d4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -63,7 +63,7 @@ services: depends_on: postgres: condition: service_healthy - image: mattermost/mattermost-enterprise-edition:release-7.5 + image: mattermost/mattermost-enterprise-edition:release-7.7 restart: unless-stopped security_opt: - no-new-privileges:true @@ -81,10 +81,17 @@ services: - ./volumes/mattermost/plugins:/mattermost/plugins:rw - ./volumes/mattermost/client/plugins:/mattermost/client/plugins:rw - ./volumes/mattermost/bleve-indexes:/mattermost/bleve-indexes:rw - - ./enterprise.txt:/mattermost/config/license.mattermost-enterprise:ro - - ./files/mattermost/config.json:/mattermost/config/config.json + - ./license.mattermost:/mattermost/config/license.mattermost-enterprise:ro - ./files/mattermost/samlCert.crt:/mattermost/config/samlCert.crt - # - ./certs/mattermost.crt:/mattermost/config/mattermost.crt:rW + - ./files/mattermost/defaultConfig.json:/mattermost/config/defaultConfig.json + environment: + - MM_SqlSettings_DriverName=postgres + - MM_SqlSettings_DataSource=postgres://mmuser:mmuser_password@cs-repro-postgres:5432/mattermost?sslmode=disable&connect_timeout=10&binary_parameters=yes + - MM_ServiceSettings_EnableLocalMode=true + - MM_ServiceSettings_LocalModeSocketLocation=/var/tmp/mattermost_local.socket + - MM_ServiceSettings_LicenseFileLocation=/mattermost/config/license.mattermost-enterprise + # command: + # - mmctl config patch /mattermost/config/defaultConfig.json --local keycloak: container_name: cs-repro-keycloak restart: unless-stopped diff --git a/files/.DS_Store b/files/.DS_Store index e8d33eb..02e147b 100644 Binary files a/files/.DS_Store and b/files/.DS_Store differ diff --git a/files/keycloak/keycloakBackup.tar b/files/keycloak/keycloakBackup.tar new file mode 100644 index 0000000..8247ee9 Binary files /dev/null and b/files/keycloak/keycloakBackup.tar differ diff --git a/files/keycloak/keycloakBackup.zip b/files/keycloak/keycloakBackup.zip deleted file mode 100644 index 4194509..0000000 Binary files a/files/keycloak/keycloakBackup.zip and /dev/null differ diff --git a/files/mattermost/config.json b/files/mattermost/config.old.json similarity index 95% rename from files/mattermost/config.json rename to files/mattermost/config.old.json index 0c690fa..d8dc055 100644 --- a/files/mattermost/config.json +++ b/files/mattermost/config.old.json @@ -89,7 +89,7 @@ "EnableSVGs": true, "EnableLatex": true, "EnableInlineLatex": true, - "PostPriority": false, + "PostPriority": true, "EnableAPIChannelDeletion": false, "EnableLocalMode": true, "LocalModeSocketLocation": "/var/tmp/mattermost_local.socket", @@ -100,12 +100,14 @@ "ThreadAutoFollow": true, "CollapsedThreads": "always_on", "ManagedResourcePaths": "", - "EnableCustomGroups": true + "EnableCustomGroups": true, + "SelfHostedPurchase": true, + "AllowSyncedDrafts": true }, "TeamSettings": { "SiteName": "Mattermost", "MaxUsersPerTeam": 50, - "EnableUserCreation": true, + "EnableUserCreation": false, "EnableOpenServer": false, "EnableUserDeactivation": false, "RestrictCreationToDomains": "", @@ -119,7 +121,7 @@ "MaxChannelsPerTeam": 2000, "MaxNotificationsPerChannel": 1000, "EnableConfirmNotificationsToChannel": true, - "TeammateNameDisplay": "username", + "TeammateNameDisplay": "full_name", "ExperimentalViewArchivedChannels": true, "ExperimentalEnableAutomaticReplies": false, "LockTeammateNameDisplay": false, @@ -142,7 +144,7 @@ "ConnMaxIdleTimeMilliseconds": 300000, "MaxOpenConns": 300, "Trace": false, - "AtRestEncryptKey": "d44qwusbidpssy13zw6cr9idp43mgw5w", + "AtRestEncryptKey": "c6j9z5bzbsargtkk17fxcjuyw7yetkdd", "QueryTimeout": 30, "DisableDatabaseSearch": false, "MigrationsStatementTimeoutSeconds": 100000, @@ -154,11 +156,12 @@ "ConsoleJson": true, "EnableColor": false, "EnableFile": true, - "FileLevel": "INFO", + "FileLevel": "DEBUG", "FileJson": true, "FileLocation": "", "EnableWebhookDebugging": true, "EnableDiagnostics": true, + "VerboseDiagnostics": false, "EnableSentry": true, "AdvancedLoggingConfig": "" }, @@ -202,7 +205,7 @@ "EnablePublicLink": false, "ExtractContent": true, "ArchiveRecursion": false, - "PublicLinkSalt": "o57y33mz89b5jjxibuyxyjds6s8tcxxd", + "PublicLinkSalt": "5dt8nrqjspnjikmb7yaz9kwesanaqcf5", "InitialFont": "nunito-bold.ttf", "AmazonS3AccessKeyId": "", "AmazonS3SecretAccessKey": "", @@ -217,8 +220,8 @@ "AmazonS3RequestTimeoutMilliseconds": 30000 }, "EmailSettings": { - "EnableSignUpWithEmail": true, - "EnableSignInWithEmail": true, + "EnableSignUpWithEmail": false, + "EnableSignInWithEmail": false, "EnableSignInWithUsername": true, "SendEmailNotifications": true, "UseChannelInEmailNotifications": false, @@ -347,13 +350,13 @@ "BaseDN": "dc=planetexpress,dc=com", "BindUsername": "cn=admin,dc=planetexpress,dc=com", "BindPassword": "GoodNewsEveryone", - "UserFilter": "(objectClass=banana)", + "UserFilter": "(objectClass=Person)", "GroupFilter": "(objectClass=Group)", "GuestFilter": "", - "EnableAdminFilter": true, + "EnableAdminFilter": false, "AdminFilter": "(memberof=cn=admin_staff,ou=people,dc=planetexpress,dc=com)", "GroupDisplayNameAttribute": "cn", - "GroupIdAttribute": "dn", + "GroupIdAttribute": "cn", "FirstNameAttribute": "givenName", "LastNameAttribute": "sn", "EmailAttribute": "mail", @@ -449,7 +452,7 @@ "IdleConnTimeoutMilliseconds": 90000 }, "MetricsSettings": { - "Enable": false, + "Enable": true, "BlockProfileRate": 0, "ListenAddress": ":8067" }, @@ -461,7 +464,8 @@ "UseNewSAMLLibrary": false, "EnableSharedChannels": false, "EnableRemoteClusterService": false, - "EnableAppBar": false + "EnableAppBar": false, + "PatchPluginsReactDOM": false }, "AnalyticsSettings": { "MaxUsersForStatistics": 2500 @@ -471,8 +475,8 @@ "Username": "elastic", "Password": "changeme", "EnableIndexing": true, - "EnableSearching": false, - "EnableAutocomplete": false, + "EnableSearching": true, + "EnableAutocomplete": true, "Sniff": true, "PostIndexReplicas": 1, "PostIndexShards": 1, @@ -532,14 +536,14 @@ }, "PluginSettings": { "Enable": true, - "EnableUploads": false, + "EnableUploads": true, "AllowInsecureDownloadURL": false, "EnableHealthCheck": true, "Directory": "./plugins", "ClientDirectory": "./client/plugins", "Plugins": { "playbooks": { - "BotUserID": "kkx51t3yytrabj9dfjtzyaazdw" + "BotUserID": "qy9ge6fgcjf35yc5ugb93r65fh" } }, "PluginStates": { @@ -575,7 +579,7 @@ "ExperimentalTimezone": true }, "GuestAccountsSettings": { - "Enable": false, + "Enable": true, "AllowEmailAccounts": true, "EnforceMultifactorAuthentication": false, "RestrictCreationToDomains": "" diff --git a/files/mattermost/defaultConfig.json b/files/mattermost/defaultConfig.json new file mode 100644 index 0000000..e4c3740 --- /dev/null +++ b/files/mattermost/defaultConfig.json @@ -0,0 +1,139 @@ +{ + "ServiceSettings": { + "LicenseFileLocation": "config/license.mattermost-enterprise", + "AllowedUntrustedInternalConnections": "cs-repro-keycloak:8080 cs-repro-keycloak" + }, + "LogSettings": { + "EnableConsole": true, + "ConsoleLevel": "DEBUG", + "ConsoleJson": true, + "EnableColor": false, + "EnableFile": true, + "FileLevel": "INFO", + "FileJson": true, + "FileLocation": "", + "EnableWebhookDebugging": true, + "EnableDiagnostics": true, + "EnableSentry": true, + "AdvancedLoggingConfig": "" + }, + "ExperimentalAuditSettings": { + "FileEnabled": false, + "FileName": "", + "FileMaxSizeMB": 100, + "FileMaxAgeDays": 0, + "FileMaxBackups": 0, + "FileCompress": false, + "FileMaxQueueSize": 1000, + "AdvancedLoggingConfig": "" + }, + "NotificationLogSettings": { + "EnableConsole": true, + "ConsoleLevel": "DEBUG", + "ConsoleJson": true, + "EnableColor": false, + "EnableFile": true, + "FileLevel": "INFO", + "FileJson": true, + "FileLocation": "", + "AdvancedLoggingConfig": "" + }, + "LdapSettings": { + "Enable": true, + "EnableSync": true, + "LdapServer": "openldap", + "LdapPort": 10389, + "ConnectionSecurity": "", + "BaseDN": "dc=planetexpress,dc=com", + "BindUsername": "cn=admin,dc=planetexpress,dc=com", + "BindPassword": "GoodNewsEveryone", + "UserFilter": "(objectClass=banana)", + "GroupFilter": "(objectClass=Group)", + "GuestFilter": "", + "EnableAdminFilter": true, + "AdminFilter": "(memberof=cn=admin_staff,ou=people,dc=planetexpress,dc=com)", + "GroupDisplayNameAttribute": "cn", + "GroupIdAttribute": "dn", + "FirstNameAttribute": "givenName", + "LastNameAttribute": "sn", + "EmailAttribute": "mail", + "UsernameAttribute": "uid", + "NicknameAttribute": "", + "IdAttribute": "uid", + "PositionAttribute": "", + "LoginIdAttribute": "uid", + "PictureAttribute": "", + "SyncIntervalMinutes": 60, + "SkipCertificateVerification": false, + "PublicCertificateFile": "", + "PrivateKeyFile": "", + "QueryTimeout": 60, + "MaxPageSize": 0, + "LoginFieldName": "", + "LoginButtonColor": "#0000", + "LoginButtonBorderColor": "#2389D7", + "LoginButtonTextColor": "#2389D7", + "Trace": true + }, + "SamlSettings": { + "Enable": true, + "EnableSyncWithLdap": true, + "EnableSyncWithLdapIncludeAuth": true, + "IgnoreGuestsLdapSync": false, + "Verify": false, + "Encrypt": false, + "SignRequest": false, + "IdpURL": "http://localhost:8080/realms/master/protocol/saml", + "IdpDescriptorURL": "http://localhost:8080/realms/master", + "IdpMetadataURL": "http://cs-repro-keycloak:8080/realms/master/protocol/saml/descriptor", + "ServiceProviderIdentifier": "mattermost", + "AssertionConsumerServiceURL": "http://localhost:8065/login/sso/saml", + "SignatureAlgorithm": "RSAwithSHA1", + "CanonicalAlgorithm": "Canonical1.0", + "ScopingIDPProviderId": "", + "ScopingIDPName": "", + "IdpCertificateFile": "samlCert.crt", + "PublicCertificateFile": "", + "PrivateKeyFile": "", + "IdAttribute": "id", + "GuestAttribute": "", + "EnableAdminAttribute": false, + "AdminAttribute": "", + "FirstNameAttribute": "", + "LastNameAttribute": "", + "EmailAttribute": "email", + "UsernameAttribute": "username", + "NicknameAttribute": "", + "LocaleAttribute": "", + "PositionAttribute": "", + "LoginButtonText": "keycloak", + "LoginButtonColor": "#34a28b", + "LoginButtonBorderColor": "#2389D7", + "LoginButtonTextColor": "#ffffff" + }, + "MetricsSettings": { + "Enable": true, + "BlockProfileRate": 0, + "ListenAddress": ":8067" + }, + "ElasticsearchSettings": { + "ConnectionURL": "http://cs-repro-elasticsearch:9200", + "EnableIndexing": true, + "EnableSearching": true, + "EnableAutocomplete": true, + "Sniff": true, + "PostIndexReplicas": 1, + "PostIndexShards": 1, + "ChannelIndexReplicas": 1, + "ChannelIndexShards": 1, + "UserIndexReplicas": 1, + "UserIndexShards": 1, + "AggregatePostsAfterDays": 365, + "PostsAggregatorJobStartTime": "03:00", + "IndexPrefix": "" + }, + "PluginSettings": { + "Enable": true, + "EnableUploads": true + } +} \ No newline at end of file diff --git a/scripts/keycloak.sh b/scripts/keycloak.sh new file mode 100755 index 0000000..2ed5092 --- /dev/null +++ b/scripts/keycloak.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +DIR="./volumes/keycloak" + +restore () { + if [ -d "$DIR" ]; then + echo =========================================================== + echo + echo "'$DIR' found skipping keycloak setup" + echo + echo =========================================================== + else + echo =========================================================== + echo + echo "Warning: '$DIR' NOT found. Setting up from base" + echo + echo =========================================================== + mkdir -p ./volumes/keycloak + tar -zxf ./files/keycloak/keycloakBackup.tar -C ./volumes/keycloak + fi +} + +backup () { + if [ -d "$DIR" ]; then + echo =========================================================== + echo + echo "'$DIR' found backing up keycloak" + echo + echo =========================================================== + + tar -zcf keycloakBackup.tar -C ./volumes/keycloak . + mv keycloakBackup.tar ./files/keycloak/keycloakBackup.tar + + else + echo =========================================================== + echo + echo "Warning: '$DIR' NOT found. Skipping backup" + echo + echo =========================================================== + fi + +} + +"$@" \ No newline at end of file diff --git a/scripts/mattermost.sh b/scripts/mattermost.sh new file mode 100755 index 0000000..606644b --- /dev/null +++ b/scripts/mattermost.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +DIR="./volumes/mattermost" + +setup() { + if ! waitForStart; then + make stop + else + + echo + echo + echo + echo "Do you want to setup test data for Mattermost?" + echo "This will overwrite some config and add a sysadmin user and a regular user." + echo "If you are curious about the config changes check out the file ./files/mattermost/defaultConfig.json" + echo "If you don't want to do this, just press enter." + echo + read -p "Y / N " -n 1 -r + echo # (optional) move to a new line + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo =========================================================== + echo + echo "setting up test Data for Mattermost" + echo + echo =========================================================== + + docker exec -it cs-repro-mattermost mmctl config patch /mattermost/config/defaultConfig.json --local + docker exec -it cs-repro-mattermost mmctl user create --password Testpassword123! --username sysadmin --email sysadmin@example.com --system-admin --local + docker exec -it cs-repro-mattermost mmctl user create --password Testpassword123! --username user-1 --email user-1@example.com --local + + echoLogins + exit 0 + fi + fi + + echo + echo "Alright, everything seems to be setup and running. Enjoy." + +} + +total=0 +max_wait_seconds=120 + +waitForStart() { + echo "waiting $max_wait_seconds seconds for the server to start" + + while [[ "$total" -le "$max_wait_seconds" ]]; do + if docker exec -i cs-repro-mattermost mmctl system status --local 2>/dev/null; then + echo "server started" + return 0 + else + ((total = total + 1)) + printf "." + sleep 1 + fi + done + + printf "\nserver didn't start in $max_wait_seconds seconds\n" + + make stop + exit 1 +} + +echoLogins() { + echo + echo ======================================================================== + echo + echo Logins: + echo + echo - System admin: username=sysadmin password=Testpassword123! + echo - Regular account: username=user-1 password=Testpassword123! + echo - LDAP or SAML account: username=professor password=professor + echo + echo ======================================================================== +} + +"$@" diff --git a/volumes/keycloak/h2/keycloakdb.mv.db b/volumes/keycloak/h2/keycloakdb.mv.db deleted file mode 100644 index e1bbb72..0000000 Binary files a/volumes/keycloak/h2/keycloakdb.mv.db and /dev/null differ diff --git a/volumes/keycloak/h2/keycloakdb.trace.db b/volumes/keycloak/h2/keycloakdb.trace.db deleted file mode 100644 index 59bcf15..0000000 --- a/volumes/keycloak/h2/keycloakdb.trace.db +++ /dev/null @@ -1,389 +0,0 @@ -2023-01-31 20:05:33 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Table "MIGRATION_MODEL" not found; SQL statement: -SELECT ID, VERSION FROM MIGRATION_MODEL ORDER BY UPDATE_TIME DESC [42102-197] -2023-01-31 20:09:07 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Table "MIGRATION_MODEL" not found; SQL statement: -SELECT ID, VERSION FROM MIGRATION_MODEL ORDER BY UPDATE_TIME DESC [42102-197] -2023-01-31 20:09:11 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Table "DATABASECHANGELOG" not found; SQL statement: -SELECT COUNT(*) FROM PUBLIC.DATABASECHANGELOG [42102-197] -2023-01-31 20:09:13 jdbc[4]: exception -org.h2.jdbc.JdbcSQLException: Table "DATABASECHANGELOGLOCK" not found; SQL statement: -SELECT COUNT(*) FROM PUBLIC.DATABASECHANGELOGLOCK [42102-197] -2023-01-31 20:09:13 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Table "DATABASECHANGELOG" not found; SQL statement: -SELECT COUNT(*) FROM PUBLIC.DATABASECHANGELOG [42102-197] -2023-01-31 20:16:47 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1502) - at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:455) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:451) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) - at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) - at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) - at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) - at picocli.CommandLine.executeUserObject(CommandLine.java:1939) - at picocli.CommandLine.access$1300(CommandLine.java:145) - at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) - at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) - at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) - at picocli.CommandLine.execute(CommandLine.java:2078) - at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:88) - at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:566) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) -2023-01-31 20:16:47 jdbc[4]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) - at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) - at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) - at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) - at picocli.CommandLine.executeUserObject(CommandLine.java:1939) - at picocli.CommandLine.access$1300(CommandLine.java:145) - at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) - at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) - at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) - at picocli.CommandLine.execute(CommandLine.java:2078) - at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:88) - at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:566) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) -2023-01-31 20:16:47 jdbc[5]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:215) - at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) - at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:86) - at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:34) - at picocli.CommandLine.executeUserObject(CommandLine.java:1939) - at picocli.CommandLine.access$1300(CommandLine.java:145) - at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) - at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) - at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) - at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) - at picocli.CommandLine.execute(CommandLine.java:2078) - at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:88) - at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:77) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:566) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:60) - at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:31) -2023-01-31 20:34:31 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1502) - at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:455) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:451) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) -2023-01-31 20:36:21 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1502) - at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:455) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:451) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) -2023-01-31 20:37:21 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at io.agroal.pool.ConnectionFactory.xaConnectionSetup(ConnectionFactory.java:251) - at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:216) - at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:513) - at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:494) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) - at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) - at java.base/java.lang.Thread.run(Thread.java:829) -2023-01-31 20:37:21 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection.getConnection(JdbcXAConnection.java:104) - at io.agroal.pool.ConnectionHandler.(ConnectionHandler.java:91) - at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:513) - at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:494) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) - at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) - at java.base/java.lang.Thread.run(Thread.java:829) -2023-01-31 21:37:21 jdbc[3]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1502) - at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:455) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:451) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) -2023-01-31 21:37:21 jdbc[4]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) -2023-01-31 21:37:21 jdbc[5]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420) -2023-01-31 21:37:21 jdbc[6]: exception -org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) - at org.h2.message.DbException.get(DbException.java:179) - at org.h2.message.DbException.get(DbException.java:155) - at org.h2.message.DbException.get(DbException.java:144) - at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1526) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.checkClosed(JdbcXAConnection.java:470) - at org.h2.jdbc.JdbcConnection.checkClosedForWrite(JdbcConnection.java:1512) - at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:516) - at org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection.close(JdbcXAConnection.java:450) - at org.h2.jdbcx.JdbcXAConnection.close(JdbcXAConnection.java:78) - at io.agroal.pool.ConnectionHandler.closeConnection(ConnectionHandler.java:185) - at io.agroal.pool.ConnectionPool$DestroyConnectionTask.run(ConnectionPool.java:768) - at io.agroal.pool.ConnectionPool.close(ConnectionPool.java:189) - at io.agroal.pool.DataSource.close(DataSource.java:79) - at io.quarkus.agroal.runtime.DataSources.stop(DataSources.java:381) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.agroal.runtime.DataSources_Bean.destroy(Unknown Source) - at io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:80) - at io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:20) - at io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:94) - at io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:369) - at io.quarkus.arc.Arc.shutdown(Arc.java:52) - at io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:44) - at io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84) - at io.quarkus.runtime.StartupContext.close(StartupContext.java:73) - at io.quarkus.runner.ApplicationImpl.doStop(Unknown Source) - at io.quarkus.runtime.Application.stop(Application.java:203) - at io.quarkus.runtime.Application.stop(Application.java:155) - at io.quarkus.runtime.ApplicationLifecycleManager$ShutdownHookThread.run(ApplicationLifecycleManager.java:420)