提交 1bc0ac96 authored 作者: mehneni's avatar mehneni

Fix problem with websphere connection pool resetting client info

上级 e6d4c99f
...@@ -30,9 +30,11 @@ import java.util.ArrayList; ...@@ -30,9 +30,11 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.h2.api.ErrorCode; import org.h2.api.ErrorCode;
import org.h2.command.CommandInterface; import org.h2.command.CommandInterface;
import org.h2.engine.ConnectionInfo; import org.h2.engine.ConnectionInfo;
...@@ -1737,6 +1739,12 @@ public class JdbcConnection extends TraceObject ...@@ -1737,6 +1739,12 @@ public class JdbcConnection extends TraceObject
+ ");"); + ");");
} }
checkClosed(); checkClosed();
// no change to property: Ignore call. This early exit fixes a problem with websphere liberty
// resetting the client info of a pooled connection to its initial values.
if (Objects.equals(value, getClientInfo(name))) {
return;
}
if (isInternalProperty(name)) { if (isInternalProperty(name)) {
throw new SQLClientInfoException( throw new SQLClientInfoException(
......
...@@ -5,14 +5,15 @@ ...@@ -5,14 +5,15 @@
*/ */
package org.h2.test.jdbc; package org.h2.test.jdbc;
import org.h2.api.ErrorCode;
import org.h2.test.TestBase;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLClientInfoException; import java.sql.SQLClientInfoException;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Properties; import java.util.Properties;
import org.h2.api.ErrorCode;
import org.h2.test.TestBase;
/** /**
* Tests the client info * Tests the client info
*/ */
...@@ -35,6 +36,7 @@ public class TestConnection extends TestBase { ...@@ -35,6 +36,7 @@ public class TestConnection extends TestBase {
testSetSupportedClientInfoProperties(); testSetSupportedClientInfoProperties();
testSetUnsupportedClientInfoProperties(); testSetUnsupportedClientInfoProperties();
testSetInternalProperty(); testSetInternalProperty();
testSetInternalPropertyToInitialValue();
testSetGetSchema(); testSetGetSchema();
} }
...@@ -47,6 +49,29 @@ public class TestConnection extends TestBase { ...@@ -47,6 +49,29 @@ public class TestConnection extends TestBase {
assertThrows(SQLClientInfoException.class, conn).setClientInfo("server23", "SomeValue"); assertThrows(SQLClientInfoException.class, conn).setClientInfo("server23", "SomeValue");
conn.close(); conn.close();
} }
/**
* Test that no exception is thrown if the client info of a connection managed in a connection pool is reset
* to its initial values.
*
* This is needed when using h2 in websphere liberty.
*/
private void testSetInternalPropertyToInitialValue() throws SQLException {
// Use MySQL-mode since this allows all property names
// (apart from h2 internal names).
Connection conn = getConnection("clientInfoMySQL;MODE=MySQL");
String numServersPropertyName = "numServers";
String numServers = conn.getClientInfo(numServersPropertyName);
conn.setClientInfo(numServersPropertyName, numServers);
assertEquals(conn.getClientInfo(numServersPropertyName), numServers);
conn.close();
}
private void testSetUnsupportedClientInfoProperties() throws SQLException { private void testSetUnsupportedClientInfoProperties() throws SQLException {
Connection conn = getConnection("clientInfo"); Connection conn = getConnection("clientInfo");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论