From 7b4f9af2278002cd5171b14a87d5dc521aa7c126 Mon Sep 17 00:00:00 2001 From: Ben Iofel Date: Tue, 10 Jan 2023 18:12:54 -0500 Subject: [PATCH 1/3] Add exceptionOverrideClassName Hikari config setting Use case is the AWS JDBC wrapper driver - https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheFailoverPlugin.md#connection-pooling --- persistence/play-jdbc/src/main/resources/reference.conf | 3 +++ .../src/main/scala/play/api/db/HikariCPModule.scala | 1 + .../src/test/scala/play/api/db/HikariCPConfigSpec.scala | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/persistence/play-jdbc/src/main/resources/reference.conf b/persistence/play-jdbc/src/main/resources/reference.conf index 6c3d8e06ef3..cc2dbdee115 100644 --- a/persistence/play-jdbc/src/main/resources/reference.conf +++ b/persistence/play-jdbc/src/main/resources/reference.conf @@ -123,6 +123,9 @@ play { # If non null, sets the transaction isolation level transactionIsolation = null + # The user-supplied SQLExceptionOverride class name. + exceptionOverrideClassName = null + # The validation timeout to use validationTimeout = 5 seconds diff --git a/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala b/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala index e7b35a55fc4..2f70d17c9db 100644 --- a/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala +++ b/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala @@ -146,6 +146,7 @@ private[db] class HikariCPConfig private ( config.get[Option[String]]("connectionInitSql").foreach(hikariConfig.setConnectionInitSql) config.get[Option[String]]("catalog").foreach(hikariConfig.setCatalog) config.get[Option[String]]("transactionIsolation").foreach(hikariConfig.setTransactionIsolation) + config.get[Option[String]]("exceptionOverrideClassName").foreach(hikariConfig.setExceptionOverrideClassName) hikariConfig.setValidationTimeout(config.get[FiniteDuration]("validationTimeout").toMillis) hikariConfig.setLeakDetectionThreshold(toMillis(config.get[Duration]("leakDetectionThreshold"))) diff --git a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala index 359abcc8caf..1e78c535208 100644 --- a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala +++ b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala @@ -177,6 +177,14 @@ class HikariCPConfigSpec extends Specification { val config = from("hikaricp.leakDetectionThreshold" -> "3 seconds") new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getLeakDetectionThreshold must beEqualTo(3000L) } + + "exceptionOverrideClassName" in new Configs { + class MyExceptionOverride extends com.zaxxer.hikari.SQLExceptionOverride {} + val className = classOf[MyExceptionOverride].getName + + val config = from("hikaricp.exceptionOverrideClassName" -> className) + new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getExceptionOverrideClassName must beEqualTo(className) + } } } } From f28e546d468fce458894c6df75d3e91304aaba0b Mon Sep 17 00:00:00 2001 From: Ben Iofel Date: Tue, 10 Jan 2023 18:17:14 -0500 Subject: [PATCH 2/3] Fix test --- .../src/test/scala/play/api/db/HikariCPConfigSpec.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala index 1e78c535208..bf0e853c38b 100644 --- a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala +++ b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala @@ -179,8 +179,7 @@ class HikariCPConfigSpec extends Specification { } "exceptionOverrideClassName" in new Configs { - class MyExceptionOverride extends com.zaxxer.hikari.SQLExceptionOverride {} - val className = classOf[MyExceptionOverride].getName + val className = classOf[MyTestExceptionOverride].getName val config = from("hikaricp.exceptionOverrideClassName" -> className) new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getExceptionOverrideClassName must beEqualTo(className) @@ -189,6 +188,8 @@ class HikariCPConfigSpec extends Specification { } } +class MyTestExceptionOverride extends com.zaxxer.hikari.SQLExceptionOverride {} + trait Configs extends Scope { val dbConfig: DatabaseConfig = DatabaseConfig(Some("org.h2.Driver"), Some("jdbc:h2:mem:"), None, None, None) val reference: Configuration = Configuration.reference.get[Configuration]("play.db.prototype") From a215073aae6df54e2c04614f7998fa9aecc8b042 Mon Sep 17 00:00:00 2001 From: Ben Iofel Date: Tue, 10 Jan 2023 18:29:26 -0500 Subject: [PATCH 3/3] scalafmt --- .../src/test/scala/play/api/db/HikariCPConfigSpec.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala index bf0e853c38b..96c8780bb6d 100644 --- a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala +++ b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala @@ -182,7 +182,9 @@ class HikariCPConfigSpec extends Specification { val className = classOf[MyTestExceptionOverride].getName val config = from("hikaricp.exceptionOverrideClassName" -> className) - new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getExceptionOverrideClassName must beEqualTo(className) + new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getExceptionOverrideClassName must beEqualTo( + className + ) } } }