提交 00004e3a authored 作者: Thomas Mueller's avatar Thomas Mueller

The wrong exception was thrown when trying to connect to a server if the server was not running.

上级 4c28636c
...@@ -1058,11 +1058,12 @@ public class ErrorCode { ...@@ -1058,11 +1058,12 @@ public class ErrorCode {
public static final int DUPLICATE_PROPERTY_1 = 90066; public static final int DUPLICATE_PROPERTY_1 = 90066;
/** /**
* The error with code <code>90067</code> is thrown when * The error with code <code>90067</code> is thrown when the client could
* the connection to the database is lost. A possible reason * not connect to the database, or if the connection was lost. Possible
* is that the database connection has been closed due to a shutdown, * reasons are: the database server is not running on the given port, the
* or that the server is stopped. Other causes could be: * connection was closed due to a shutdown, or the server was stopped. Other
* the server is not an H2 server, or the network connection is broken. * possible causes are: the server is not an H2 server, or the network
* connection is broken.
*/ */
public static final int CONNECTION_BROKEN_1 = 90067; public static final int CONNECTION_BROKEN_1 = 90067;
......
...@@ -319,7 +319,7 @@ public class SessionRemote extends SessionWithState implements SessionFactory, D ...@@ -319,7 +319,7 @@ public class SessionRemote extends SessionWithState implements SessionFactory, D
String[] servers = StringUtils.arraySplit(server, ',', true); String[] servers = StringUtils.arraySplit(server, ',', true);
int len = servers.length; int len = servers.length;
transferList.clear(); transferList.clear();
// TODO cluster: support at most 2 connections // TODO cluster: support more than 2 connections
boolean switchOffCluster = false; boolean switchOffCluster = false;
try { try {
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
...@@ -328,7 +328,7 @@ public class SessionRemote extends SessionWithState implements SessionFactory, D ...@@ -328,7 +328,7 @@ public class SessionRemote extends SessionWithState implements SessionFactory, D
transferList.add(trans); transferList.add(trans);
} catch (IOException e) { } catch (IOException e) {
if (len == 1) { if (len == 1) {
throw DbException.convert(e); throw DbException.get(ErrorCode.CONNECTION_BROKEN_1, e, e.getMessage());
} }
switchOffCluster = true; switchOffCluster = true;
} }
......
...@@ -209,6 +209,14 @@ public class TestTools extends TestBase { ...@@ -209,6 +209,14 @@ public class TestTools extends TestBase {
} }
private void testWrongServer() throws Exception { private void testWrongServer() throws Exception {
try {
// try to connect when the server is not running
Connection conn = getConnection("jdbc:h2:tcp://localhost:9001/test");
conn.close();
fail();
} catch (SQLException e) {
assertEquals(ErrorCode.CONNECTION_BROKEN_1, e.getErrorCode());
}
final ServerSocket serverSocket = new ServerSocket(9001); final ServerSocket serverSocket = new ServerSocket(9001);
Thread thread = new Thread() { Thread thread = new Thread() {
public void run() { public void run() {
...@@ -224,6 +232,7 @@ public class TestTools extends TestBase { ...@@ -224,6 +232,7 @@ public class TestTools extends TestBase {
} }
}; };
thread.start(); thread.start();
Thread.sleep(100);
try { try {
Connection conn = getConnection("jdbc:h2:tcp://localhost:9001/test"); Connection conn = getConnection("jdbc:h2:tcp://localhost:9001/test");
conn.close(); conn.close();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论