Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2020-03-29 16:54:51 +0000
committerEike Stepper2020-03-29 16:54:51 +0000
commitde619e0fd03611c9e9875441acff0d7d12f98794 (patch)
tree7149ba34042d38f5c39f343814b9986135c3ed35 /plugins/org.eclipse.emf.cdo.server.db
parent8e538df3de586154012fa4392ea13bbf6645870e (diff)
downloadcdo-de619e0fd03611c9e9875441acff0d7d12f98794.tar.gz
cdo-de619e0fd03611c9e9875441acff0d7d12f98794.tar.xz
cdo-de619e0fd03611c9e9875441acff0d7d12f98794.zip
[561563] [DB] AbstractMappingStrategy.removeClassMapping() does not use a SchemaTransaction
https://bugs.eclipse.org/bugs/show_bug.cgi?id=561563
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF16
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/pom.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java46
4 files changed, 52 insertions, 41 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF
index 76297d29d4..e4a10d1238 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.emf.cdo.server.db;singleton:=true
-Bundle-Version: 4.8.0.qualifier
+Bundle-Version: 4.8.1.qualifier
Bundle-Name: %pluginName
Bundle-Vendor: %providerName
Bundle-Localization: plugin
@@ -12,11 +12,11 @@ Bundle-ClassPath: .
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
org.eclipse.net4j.db;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.cdo.server.db;version="4.8.0",
- org.eclipse.emf.cdo.server.db.mapping;version="4.8.0",
- org.eclipse.emf.cdo.server.internal.db;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db,org.eclipse.emf.cdo.explorer.ui",
- org.eclipse.emf.cdo.server.internal.db.bundle;version="4.8.0";x-internal:=true,
- org.eclipse.emf.cdo.server.internal.db.mapping;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db",
- org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;version="4.8.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db",
- org.eclipse.emf.cdo.server.internal.db.messages;version="4.8.0";x-internal:=true
+Export-Package: org.eclipse.emf.cdo.server.db;version="4.8.1",
+ org.eclipse.emf.cdo.server.db.mapping;version="4.8.1",
+ org.eclipse.emf.cdo.server.internal.db;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db,org.eclipse.emf.cdo.explorer.ui",
+ org.eclipse.emf.cdo.server.internal.db.bundle;version="4.8.1";x-internal:=true,
+ org.eclipse.emf.cdo.server.internal.db.mapping;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db",
+ org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;version="4.8.1";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo.tests.db",
+ org.eclipse.emf.cdo.server.internal.db.messages;version="4.8.1";x-internal:=true
Automatic-Module-Name: org.eclipse.emf.cdo.server.db
diff --git a/plugins/org.eclipse.emf.cdo.server.db/pom.xml b/plugins/org.eclipse.emf.cdo.server.db/pom.xml
index f413f2579a..b974e70780 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/pom.xml
+++ b/plugins/org.eclipse.emf.cdo.server.db/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.eclipse.emf.cdo</groupId>
<artifactId>org.eclipse.emf.cdo.server.db</artifactId>
- <version>4.8.0-SNAPSHOT</version>
+ <version>4.8.1-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
index 8868ea1ad4..035d1cddaa 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
@@ -72,7 +72,6 @@ import org.eclipse.net4j.db.BatchedStatement;
import org.eclipse.net4j.db.DBException;
import org.eclipse.net4j.db.DBUtil;
import org.eclipse.net4j.db.IDBConnection;
-import org.eclipse.net4j.db.IDBDatabase;
import org.eclipse.net4j.db.IDBPreparedStatement;
import org.eclipse.net4j.db.IDBPreparedStatement.ReuseProbability;
import org.eclipse.net4j.db.IDBSchemaTransaction;
@@ -819,35 +818,15 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor,
try
{
connection.rollback();
-
- // Bug 298632: Must rollback DBSchema to its prior state and drop the tables
- IMappingStrategy mappingStrategy = store.getMappingStrategy();
- mappingStrategy.removeMapping(connection, commitContext.getNewPackageUnits());
-
- if (createdTables != null)
- {
- IDBDatabase database = store.getDatabase();
- IDBSchemaTransaction schemaTransaction = database.openSchemaTransaction();
-
- try
- {
- for (IDBTable table : createdTables)
- {
- table.remove();
- }
-
- schemaTransaction.commit();
- }
- finally
- {
- schemaTransaction.close();
- }
- }
}
catch (SQLException ex)
{
throw new DBException(ex);
}
+
+ // Bug 298632: Must rollback DBSchema to its prior state and drop the tables
+ IMappingStrategy mappingStrategy = store.getMappingStrategy();
+ mappingStrategy.removeMapping(connection, commitContext.getNewPackageUnits());
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java
index 7e565fbb28..34e9697c75 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AbstractMappingStrategy.java
@@ -43,6 +43,8 @@ import org.eclipse.emf.cdo.spi.server.InternalRepository;
import org.eclipse.net4j.db.DBException;
import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.IDBConnection;
+import org.eclipse.net4j.db.IDBSchemaTransaction;
import org.eclipse.net4j.db.ddl.IDBSchema;
import org.eclipse.net4j.db.ddl.IDBTable;
import org.eclipse.net4j.util.ImplementationError;
@@ -524,11 +526,11 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
{
EPackage ePackage = packageInfo.getEPackage();
EClass[] persistentClasses = EMFUtil.getPersistentClasses(ePackage);
- mapClasses(connection, unmap, persistentClasses, classMappings);
+ mapClasses(persistentClasses, connection, unmap, classMappings);
}
}
- private void mapClasses(Connection connection, boolean unmap, EClass[] eClasses, Set<IClassMapping> classMappings)
+ private void mapClasses(EClass[] eClasses, Connection connection, boolean unmap, Set<IClassMapping> classMappings)
{
for (EClass eClass : eClasses)
{
@@ -542,7 +544,7 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
continue;
}
- IClassMapping classMapping = unmap ? removeClassMapping(eClass) : createClassMapping(eClass);
+ IClassMapping classMapping = unmap ? removeClassMapping(eClass, connection) : createClassMapping(eClass);
if (classMapping != null)
{
classMappings.add(classMapping);
@@ -562,15 +564,45 @@ public abstract class AbstractMappingStrategy extends Lifecycle implements IMapp
return classMapping;
}
- private IClassMapping removeClassMapping(EClass eClass)
+ private IClassMapping removeClassMapping(EClass eClass, Connection connection)
{
IClassMapping classMapping = classMappings.get(eClass);
if (classMapping != null)
{
- IDBSchema schema = getStore().getDBSchema();
- for (IDBTable table : classMapping.getDBTables())
+ IDBSchemaTransaction schemaTransaction = null;
+ IDBSchema workingCopy = null;
+
+ try
+ {
+ for (IDBTable table : classMapping.getDBTables())
+ {
+ if (table != null)
+ {
+ String name = table.getName();
+ if (name != null)
+ {
+ if (workingCopy == null)
+ {
+ schemaTransaction = getStore().getDatabase().openSchemaTransaction((IDBConnection)connection);
+ workingCopy = schemaTransaction.getWorkingCopy();
+ }
+
+ workingCopy.removeTable(name);
+ }
+ }
+ }
+
+ if (schemaTransaction != null)
+ {
+ schemaTransaction.commit();
+ }
+ }
+ finally
{
- schema.removeTable(table.getName());
+ if (schemaTransaction != null)
+ {
+ schemaTransaction.close();
+ }
}
classMappings.remove(eClass);

Back to the top