gdamour 2006/01/31 08:31:07
Modified: modules/openejb-builder/src/java/org/openejb/deployment
SchemataBuilder.java
Log:
GERONIMO-1545 CMP update statements will cause incorrect trigger firing
in a database
The optional flag <static-sql> can be used to control the way a CMP is
updated. By default, an UPDATE statement is dynamically generated each time
that a CMP needs to be persisted. This statement only updates the columns
which have been updated during the transaction,
When <static-sql> is set, a single UPDATE statement is generated whatever
the CMP fields to be actually updated. This was the previous strategy.
Revision Changes Path
1.6 +15 -4
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SchemataBuilder.java
Index: SchemataBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SchemataBuilder.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SchemataBuilder.java 3 Dec 2005 22:47:29 -0000 1.5
+++ SchemataBuilder.java 31 Jan 2006 13:31:07 -0000 1.6
@@ -108,13 +108,16 @@
import org.tranql.sql.BaseSQLSchema;
import org.tranql.sql.Column;
import org.tranql.sql.DBSyntaxFactory;
+import org.tranql.sql.DynamicCommandBuilder;
import org.tranql.sql.EJBQLCompilerFactory;
import org.tranql.sql.EndTable;
import org.tranql.sql.FKColumn;
import org.tranql.sql.JoinTable;
import org.tranql.sql.SQLSchema;
+import org.tranql.sql.StaticCommandBuilder;
import org.tranql.sql.Table;
import org.tranql.sql.TypeConverter;
+import org.tranql.sql.UpdateCommandBuilder;
import org.tranql.sql.jdbc.SQLTypeLoader;
import org.tranql.sql.prefetch.PrefetchGroupDictionary;
import org.tranql.sql.prefetch.PrefetchGroupDictionary.EndTableDesc;
@@ -177,7 +180,8 @@
processEnterpriseBeans(ejbJar, openejbEjbJar, cl);
processRelationships(ejbJar, openejbEjbJar);
processGroups(openejbEjbJar);
- GlobalSchemaLoader.populateGlobalSchema(globalSchema, ejbSchema,
sqlSchema);
+ GlobalSchemaLoader loader = new GlobalSchemaLoader(globalSchema,
ejbSchema, sqlSchema);
+ loader.build();
processEnterpriseBeanCaches(openejbEjbJar);
} catch (Exception e) {
throw new DeploymentException("Could not deploy module", e);
@@ -371,7 +375,14 @@
ejb = new EJB(ejbName, abstractSchemaName, pkClass,
proxyFactory, keyGenerator, unknownPK);
Table table = new Table(ejbName, openEjbEntity.getTableName());
-
+ UpdateCommandBuilder commandBuilder;
+ if (openEjbEntity.isSetStaticSql()) {
+ commandBuilder = new StaticCommandBuilder(ejbName,
ejbSchema, sqlSchema, globalSchema);
+ } else {
+ commandBuilder = new DynamicCommandBuilder(ejbName,
ejbSchema, sqlSchema, globalSchema);
+ }
+ table.setCommandBuilder(commandBuilder);
+
Set pkFieldNames;
if ( unknownPK && openEjbEntity.isSetPrimkeyField() ) {
pkFieldNames = new HashSet(1);