From 701517d3b86ddf230b13bbb76840341ca803d5cd Mon Sep 17 00:00:00 2001 From: johnon Date: Wed, 18 Feb 2015 12:55:56 -0800 Subject: [PATCH 1/2] Allows Hikari to look up an arbitary JNDI resource name for the metric registry --- .../main/java/com/zaxxer/hikari/AbstractHikariConfig.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/AbstractHikariConfig.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/AbstractHikariConfig.java index 33912212..a92e36e5 100644 --- a/hikaricp-common/src/main/java/com/zaxxer/hikari/AbstractHikariConfig.java +++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/AbstractHikariConfig.java @@ -26,7 +26,6 @@ import java.util.TreeSet; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; -import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; @@ -505,8 +504,7 @@ public abstract class AbstractHikariConfig implements HikariConfigMBean if (metricRegistry instanceof String) { try { InitialContext initCtx = new InitialContext(); - Context envCtx = (Context) initCtx.lookup("java:comp/env"); - metricRegistry = (MetricRegistry) envCtx.lookup((String) metricRegistry); + metricRegistry = (MetricRegistry) initCtx.lookup((String) metricRegistry); } catch (NamingException e) { throw new IllegalArgumentException(e); @@ -542,8 +540,7 @@ public abstract class AbstractHikariConfig implements HikariConfigMBean if (healthCheckRegistry instanceof String) { try { InitialContext initCtx = new InitialContext(); - Context envCtx = (Context) initCtx.lookup("java:comp/env"); - healthCheckRegistry = (MetricRegistry) envCtx.lookup((String) healthCheckRegistry); + healthCheckRegistry = (MetricRegistry) initCtx.lookup((String) healthCheckRegistry); } catch (NamingException e) { throw new IllegalArgumentException(e); From a310df95d71c0e3248efb9322f6a62a19590402d Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Wed, 25 Feb 2015 00:11:54 +0900 Subject: [PATCH 2/2] Fix #269 Guard against drivers that construct an SQLException where the 'cause' is self-referential. Hopefully the cycle is not multi-layers deep, because this check will only guard against one "loop". --- .../src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java index 1f8fab6d..68318113 100644 --- a/hikaricp-common/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java +++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java @@ -109,7 +109,7 @@ public abstract class ConnectionProxy implements IHikariConnectionProxy LOGGER.warn(String.format("Connection %s (%s) marked as broken because of SQLSTATE(%s), ErrorCode(%d).", delegate.toString(), parentPool.toString(), sqlState, sqle.getErrorCode()), sqle); } - else if (sqle.getNextException() instanceof SQLException) { + else if (sqle.getNextException() instanceof SQLException && sqle != sqle.getNextException()) { checkException(sqle.getNextException()); } }