[401763] Make CDO Server more robust against data dictionary changes 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=401763
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 f2e85ab..3bd14d1 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 @@
 
     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 ea485c7..8f11061 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.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 @@
   @Deprecated
   public static List<String> getAllSchemaTableNames(DatabaseMetaData metaData)
   {
-    return getAllSchemaNames(metaData);
+    return new ArrayList<String>(getAllSchemaNames(metaData));
   }
 
   /**
@@ -398,7 +400,7 @@
     try
     {
       DatabaseMetaData metaData = connection.getMetaData();
-      return getAllSchemaNames(metaData);
+      return new ArrayList<String>(getAllSchemaNames(metaData));
     }
     catch (SQLException ex)
     {
@@ -409,13 +411,13 @@
   /**
    * @since 4.2
    */
-  public static List<String> getAllSchemaNames(DatabaseMetaData metaData)
+  public static Set<String> getAllSchemaNames(DatabaseMetaData metaData)
   {
     ResultSet schemas = null;
 
     try
     {
-      List<String> names = new ArrayList<String>();
+      Set<String> names = new HashSet<String>();
       schemas = metaData.getSchemas();
       while (schemas.next())
       {
@@ -446,7 +448,7 @@
       if (dbName != null)
       {
         dbName = dbName.toUpperCase();
-        List<String> schemaNames = getAllSchemaNames(metaData);
+        Set<String> 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 d111d42..ca043bc 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 @@
       String schemaName = schema.getName();
 
       DatabaseMetaData metaData = connection.getMetaData();
+      Set<String> schemaNames = DBUtil.getAllSchemaNames(metaData);
+      if (!schemaNames.contains(schemaName))
+      {
+        schemaName = null;
+      }
+
       ResultSet tables = metaData.getTables(null, schemaName, null, new String[] { "TABLE" });
       while (tables.next())
       {