提交 9a0081ba authored 作者: Thomas Mueller's avatar Thomas Mueller

The auto-reconnect feature didn't work when using the auto-server mode. Fixed.

上级 1173ab9b
......@@ -224,10 +224,10 @@ public class SessionRemote implements SessionInterface, DataHandler {
}
public SessionInterface createSession(ConnectionInfo ci) throws SQLException {
return new SessionRemote(ci).connectEmbeddedOrServer();
return new SessionRemote(ci).connectEmbeddedOrServer(false);
}
private SessionInterface connectEmbeddedOrServer() throws SQLException {
private SessionInterface connectEmbeddedOrServer(boolean openNew) throws SQLException {
ConnectionInfo ci = connectionInfo;
if (ci.isRemote()) {
connectServer(ci);
......@@ -243,6 +243,9 @@ public class SessionRemote implements SessionInterface, DataHandler {
connectionInfo = (ConnectionInfo) ci.clone();
}
SessionInterface si = (SessionInterface) ClassUtils.loadSystemClass("org.h2.engine.Session").newInstance();
if (openNew) {
ci.setProperty("OPEN_NEW", "true");
}
return si.createSession(ci);
} catch (SQLException e) {
int errorCode = e.getErrorCode();
......@@ -434,7 +437,7 @@ public class SessionRemote implements SessionInterface, DataHandler {
return false;
}
lastReconnect++;
embedded = connectEmbeddedOrServer();
embedded = connectEmbeddedOrServer(false);
if (embedded == this) {
// connected to a server somewhere else
embedded = null;
......@@ -442,7 +445,7 @@ public class SessionRemote implements SessionInterface, DataHandler {
// opened an embedded connection now -
// must connect to this database in server mode
// unfortunately
connectEmbeddedOrServer();
connectEmbeddedOrServer(true);
}
if (sessionState != null && sessionState.size() > 0) {
sessionStateUpdating = true;
......
......@@ -54,11 +54,27 @@ public class TestAutoReconnect extends TestBase implements DatabaseEventListener
}
public void test() throws Exception {
test(true);
test(false);
testIsClosed();
testReconnect(true);
testReconnect(false);
}
private void test(boolean autoServer) throws Exception {
private void testIsClosed() throws Exception {
deleteDb("autoReconnect");
url = "jdbc:h2:" + baseDir + "/autoReconnect;" +
"AUTO_SERVER=TRUE;OPEN_NEW=TRUE";
Connection conn1 = DriverManager.getConnection(url);
conn1.createStatement().execute("CREATE TABLE TEST(ID INT)");
Connection conn2 = DriverManager.getConnection(url);
assertFalse(conn1.isClosed());
conn1.close();
assertTrue(conn1.isClosed());
assertFalse(conn2.isClosed());
conn2.close();
assertTrue(conn1.isClosed());
}
private void testReconnect(boolean autoServer) throws Exception {
this.autoServer = autoServer;
deleteDb("autoReconnect");
if (autoServer) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论