From cb7c825bc51e11e05faa66a0636c381b1d43c30d Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Tue, 12 Mar 2013 09:27:04 +0100 Subject: [401763] Make CDO Server more robust against data dictionary changes https://bugs.eclipse.org/bugs/show_bug.cgi?id=401763 --- .../src/org/eclipse/emf/cdo/server/internal/db/DBStore.java | 12 ++++++++++-- .../src/org/eclipse/net4j/db/DBUtil.java | 12 +++++++----- .../src/org/eclipse/net4j/spi/db/DBAdapter.java | 6 ++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java index f2e85abdf1..3bd14d1340 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStore.java @@ -620,8 +620,16 @@ public class DBStore extends Store implements IDBStore, IMappingConstants, CDOAl database = DBUtil.openDatabase(dbAdapter, dbConnectionProvider, repository.getName()); IDBSchemaTransaction schemaTransaction = database.openSchemaTransaction(); - schemaTransaction.ensureSchema(CDODBSchema.INSTANCE); - schemaTransaction.commit(); + + try + { + schemaTransaction.ensureSchema(CDODBSchema.INSTANCE); + schemaTransaction.commit(); + } + finally + { + schemaTransaction.close(); + } LifecycleUtil.activate(idHandler); LifecycleUtil.activate(metaDataManager); diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java index ea485c7c4b..8f1106166a 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/db/DBUtil.java @@ -40,8 +40,10 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * A utility class with various static factory and convenience methods. @@ -387,7 +389,7 @@ public final class DBUtil @Deprecated public static List getAllSchemaTableNames(DatabaseMetaData metaData) { - return getAllSchemaNames(metaData); + return new ArrayList(getAllSchemaNames(metaData)); } /** @@ -398,7 +400,7 @@ public final class DBUtil try { DatabaseMetaData metaData = connection.getMetaData(); - return getAllSchemaNames(metaData); + return new ArrayList(getAllSchemaNames(metaData)); } catch (SQLException ex) { @@ -409,13 +411,13 @@ public final class DBUtil /** * @since 4.2 */ - public static List getAllSchemaNames(DatabaseMetaData metaData) + public static Set getAllSchemaNames(DatabaseMetaData metaData) { ResultSet schemas = null; try { - List names = new ArrayList(); + Set names = new HashSet(); schemas = metaData.getSchemas(); while (schemas.next()) { @@ -446,7 +448,7 @@ public final class DBUtil if (dbName != null) { dbName = dbName.toUpperCase(); - List schemaNames = getAllSchemaNames(metaData); + Set schemaNames = getAllSchemaNames(metaData); if (!schemaNames.contains(dbName)) { dbName = null; diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java index d111d42838..ca043bc934 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/spi/db/DBAdapter.java @@ -152,6 +152,12 @@ public abstract class DBAdapter implements IDBAdapter String schemaName = schema.getName(); DatabaseMetaData metaData = connection.getMetaData(); + Set schemaNames = DBUtil.getAllSchemaNames(metaData); + if (!schemaNames.contains(schemaName)) + { + schemaName = null; + } + ResultSet tables = metaData.getTables(null, schemaName, null, new String[] { "TABLE" }); while (tables.next()) { -- cgit v1.2.3