提交 da0ff518 authored 作者: Noel Grandin's avatar Noel Grandin

cleanup after previous commit

上级 610e3d69
...@@ -13,6 +13,7 @@ import java.sql.Statement; ...@@ -13,6 +13,7 @@ import java.sql.Statement;
import org.h2.api.ErrorCode; import org.h2.api.ErrorCode;
import org.h2.engine.Constants; import org.h2.engine.Constants;
import org.h2.store.fs.FileUtils; import org.h2.store.fs.FileUtils;
import org.h2.util.IOUtils;
import org.h2.util.JdbcUtils; import org.h2.util.JdbcUtils;
import org.h2.util.Tool; import org.h2.util.Tool;
...@@ -104,6 +105,7 @@ public class CreateCluster extends Tool { ...@@ -104,6 +105,7 @@ public class CreateCluster extends Tool {
String user, String password, String serverList) throws SQLException { String user, String password, String serverList) throws SQLException {
Connection connSource = null, connTarget = null; Connection connSource = null, connTarget = null;
Statement statSource = null, statTarget = null; Statement statSource = null, statTarget = null;
PipedReader pipeReader = null;
try { try {
org.h2.Driver.load(); org.h2.Driver.load();
...@@ -144,9 +146,7 @@ public class CreateCluster extends Tool { ...@@ -144,9 +146,7 @@ public class CreateCluster extends Tool {
// so that data can't change while restoring the second database // so that data can't change while restoring the second database
statSource.execute("SET EXCLUSIVE 2"); statSource.execute("SET EXCLUSIVE 2");
// Pipe reader should be declared outside the try block to be visible in finally{}. pipeReader = new PipedReader();
// It can be safely initialized here as it throws no exceptions.
PipedReader pipeReader = new PipedReader();
try { try {
// Pipe writer is used + closed in the inner class, in a separate thread (needs to be final). // Pipe writer is used + closed in the inner class, in a separate thread (needs to be final).
...@@ -175,14 +175,12 @@ public class CreateCluster extends Tool { ...@@ -175,14 +175,12 @@ public class CreateCluster extends Tool {
while (rs.next()) { while (rs.next()) {
pipeWriter.write(rs.getString(1) + "\n"); pipeWriter.write(rs.getString(1) + "\n");
} }
} catch (Exception eScript) { } catch (SQLException ex) {
throw new IllegalStateException("Producing script from the source DB is failing.",eScript); throw new IllegalStateException("Producing script from the source DB is failing.",ex);
} catch (IOException ex) {
throw new IllegalStateException("Producing script from the source DB is failing.",ex);
} finally { } finally {
try { IOUtils.closeSilently(pipeWriter);
pipeWriter.close();
} catch (IOException eCloseWriter) {
throw new IllegalStateException("Closing the pipe writer failed.",eCloseWriter);
}
} }
} }
} }
...@@ -190,29 +188,21 @@ public class CreateCluster extends Tool { ...@@ -190,29 +188,21 @@ public class CreateCluster extends Tool {
// Read data from pipe reader, restore on target. // Read data from pipe reader, restore on target.
connTarget = DriverManager.getConnection(urlTarget, user, password); connTarget = DriverManager.getConnection(urlTarget, user, password);
RunScript runScript = new RunScript(); RunScript.execute(connTarget,pipeReader);
runScript.setOut(out);
runScript.execute(connTarget,pipeReader);
statTarget = connTarget.createStatement(); statTarget = connTarget.createStatement();
// set the cluster to the serverList on both databases // set the cluster to the serverList on both databases
statSource.executeUpdate("SET CLUSTER '" + serverList + "'"); statSource.executeUpdate("SET CLUSTER '" + serverList + "'");
statTarget.executeUpdate("SET CLUSTER '" + serverList + "'"); statTarget.executeUpdate("SET CLUSTER '" + serverList + "'");
} catch (IOException eAttach) { } catch (IOException ex) {
throw new IllegalStateException("Failed attaching pipe writer to pipe reader.",eAttach); throw new SQLException(ex);
} finally { } finally {
// switch back to the regular mode // switch back to the regular mode
statSource.execute("SET EXCLUSIVE FALSE"); statSource.execute("SET EXCLUSIVE FALSE");
try {
pipeReader.close();
} catch (Exception eCloseReader) {
throw new IllegalStateException("Failed closing the pipe reader.",eCloseReader);
}
} }
} finally { } finally {
IOUtils.closeSilently(pipeReader);
JdbcUtils.closeSilently(statSource); JdbcUtils.closeSilently(statSource);
JdbcUtils.closeSilently(statTarget); JdbcUtils.closeSilently(statTarget);
JdbcUtils.closeSilently(connSource); JdbcUtils.closeSilently(connSource);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论