gdamour 2005/09/13 09:05:00
Modified: modules/openejb-builder/src/java/org/openejb/deployment
CMPEntityBuilder.java OpenEJBModuleBuilder.java
Log:
GERONIMO-1004 SequenceTablePrimaryKeyGenerator transaction handling is broken
(Tranql)
As pointed out by David J, a TransactionManager needs to be passed to
SequenceTablePrimaryKeyGenerator in order to suspend and resume in-flight
transactions while retrieving the next ids.
Revision Changes Path
1.42 +4 -3
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java
Index: CMPEntityBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- CMPEntityBuilder.java 10 Sep 2005 14:49:07 -0000 1.41
+++ CMPEntityBuilder.java 13 Sep 2005 13:04:59 -0000 1.42
@@ -51,6 +51,7 @@
import javax.management.ObjectName;
import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
import org.apache.geronimo.common.DeploymentException;
import org.apache.geronimo.gbean.GBeanData;
@@ -115,7 +116,7 @@
* EJB JAR. This includes setting up the database mappings, key
* generation, etc.
*/
- public Schemata buildSchemata(final EARContext earContext, final
J2eeContext moduleJ2eeContext, String moduleName, EjbJarType ejbJar,
OpenejbOpenejbJarType openejbEjbJar, ClassLoader cl, final PKGenBuilder pkGen,
final DataSource dataSource) throws DeploymentException {
+ public Schemata buildSchemata(final EARContext earContext, final
J2eeContext moduleJ2eeContext, String moduleName, EjbJarType ejbJar,
OpenejbOpenejbJarType openejbEjbJar, ClassLoader cl, final PKGenBuilder pkGen,
final DataSource dataSource, final TransactionManager tm) throws
DeploymentException {
SchemataBuilder builder = new SchemataBuilder() {
protected EJBProxyFactory buildEJBProxyFactory(EntityBeanType
entityBean, String remoteInterfaceName, String homeInterfaceName, String
localInterfaceName, String localHomeInterfaceName, ClassLoader cl) throws
DeploymentException {
ObjectName entityObjectName =
createEJBObjectName(moduleJ2eeContext, entityBean);
@@ -129,7 +130,7 @@
}
protected PrimaryKeyGenerator
buildPKGenerator(EjbKeyGeneratorType config, Class pkClass) throws
DeploymentException, QueryException {
- return pkGen.configurePKGenerator(config, dataSource,
pkClass, earContext);
+ return pkGen.configurePKGenerator(config, tm, dataSource,
pkClass, earContext);
}
};
return builder.buildSchemata(moduleName, ejbJar, openejbEjbJar,
dataSource, cl);
1.56 +3 -4
openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java
Index: OpenEJBModuleBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- OpenEJBModuleBuilder.java 10 Sep 2005 14:49:07 -0000 1.55
+++ OpenEJBModuleBuilder.java 13 Sep 2005 13:04:59 -0000 1.56
@@ -361,6 +361,7 @@
J2eeContext moduleJ2eeContext =
J2eeContextImpl.newModuleContextFromApplication(earJ2eeContext,
NameFactory.EJB_MODULE, module.getName());
DataSourceDelegate delegate = new DataSourceDelegate();
+ TransactionManagerDelegate tmDelegate = new
TransactionManagerDelegate();
// Handle automatic PK generation -- we want to use the same builder
for all CMP entities
TranQLPKGenBuilder pkgen = new TranQLPKGenBuilder();
@@ -370,7 +371,7 @@
EjbJarType ejbJar = (EjbJarType) module.getSpecDD();
// @todo need a better schema name
- Schemata schemata = cmpEntityBuilder.buildSchemata(earContext,
moduleJ2eeContext, ejbModule.getName(), ejbJar, openejbEjbJar, cl, pkgen,
delegate);
+ Schemata schemata = cmpEntityBuilder.buildSchemata(earContext,
moduleJ2eeContext, ejbModule.getName(), ejbJar, openejbEjbJar, cl, pkgen,
delegate, tmDelegate);
EJBSchema ejbSchema = schemata.getEjbSchema();
SQLSchema sqlSchema = schemata.getSqlSchema();
GlobalSchema globalSchema = schemata.getGlobalSchema();
@@ -384,8 +385,6 @@
} catch (MalformedObjectNameException e) {
throw new DeploymentException("Unable to construct module name",
e);
}
-
- TransactionManagerDelegate tmDelegate = new
TransactionManagerDelegate();
GBeanData ejbModuleGBeanData = new GBeanData(ejbModuleObjectName,
EJBModuleImpl.GBEAN_INFO);
try {