gdamour     2005/09/13 09:04:59

  Modified:    modules/core/src/java/org/openejb/entity/cmp/pkgenerator
                        SequenceTablePrimaryKeyGeneratorWrapper.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.8       +11 -5     
openejb/modules/core/src/java/org/openejb/entity/cmp/pkgenerator/SequenceTablePrimaryKeyGeneratorWrapper.java
  
  Index: SequenceTablePrimaryKeyGeneratorWrapper.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/entity/cmp/pkgenerator/SequenceTablePrimaryKeyGeneratorWrapper.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SequenceTablePrimaryKeyGeneratorWrapper.java      6 Mar 2005 02:49:38 
-0000       1.7
  +++ SequenceTablePrimaryKeyGeneratorWrapper.java      13 Sep 2005 13:04:59 
-0000      1.8
  @@ -48,6 +48,7 @@
   package org.openejb.entity.cmp.pkgenerator;
   
   import javax.sql.DataSource;
  +import javax.transaction.TransactionManager;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  @@ -56,6 +57,7 @@
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
   import org.apache.geronimo.gbean.GBeanLifecycle;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
  +import org.apache.geronimo.transaction.context.TransactionContextManager;
   import org.tranql.cache.CacheRow;
   import org.tranql.cache.DuplicateIdentityException;
   import org.tranql.cache.InTxCache;
  @@ -71,14 +73,16 @@
    */
   public class SequenceTablePrimaryKeyGeneratorWrapper implements 
PrimaryKeyGenerator, GBeanLifecycle {
       private static final Log log = 
LogFactory.getLog(SequenceTablePrimaryKeyGeneratorWrapper.class);
  -    
  +
  +    private final TransactionContextManager transactionContextManager;
       private final ManagedConnectionFactoryWrapper connectionFactoryWrapper;
       private final String tableName;
       private final String sequenceName;
       private final int batchSize;
       private SequenceTablePrimaryKeyGenerator delegate; 
   
  -    public 
SequenceTablePrimaryKeyGeneratorWrapper(ManagedConnectionFactoryWrapper 
connectionFactoryWrapper, String tableName, String sequenceName, int batchSize) 
{
  +    public SequenceTablePrimaryKeyGeneratorWrapper(TransactionContextManager 
transactionContextManager, ManagedConnectionFactoryWrapper 
connectionFactoryWrapper, String tableName, String sequenceName, int batchSize) 
{
  +        this.transactionContextManager = transactionContextManager;
           this.connectionFactoryWrapper = connectionFactoryWrapper;
           this.tableName = tableName;
           this.sequenceName = sequenceName;
  @@ -87,7 +91,8 @@
       
       public void doStart() throws Exception {
           DataSource dataSource = (DataSource) 
connectionFactoryWrapper.$getResource();
  -        delegate = new SequenceTablePrimaryKeyGenerator(dataSource, 
tableName, sequenceName, batchSize);
  +        TransactionManager tm = 
transactionContextManager.getTransactionManager();
  +        delegate = new SequenceTablePrimaryKeyGenerator(tm, dataSource, 
tableName, sequenceName, batchSize);
           delegate.initSequenceTable();
       }
   
  @@ -113,12 +118,13 @@
           GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(SequenceTablePrimaryKeyGeneratorWrapper.class);
           infoFactory.addInterface(PrimaryKeyGenerator.class);
           
  +        infoFactory.addReference("TransactionContextManager", 
TransactionContextManager.class, NameFactory.JTA_RESOURCE);
           infoFactory.addReference("ManagedConnectionFactoryWrapper", 
ManagedConnectionFactoryWrapper.class, 
NameFactory.JCA_MANAGED_CONNECTION_FACTORY);
           infoFactory.addAttribute("tableName", String.class, true);
           infoFactory.addAttribute("sequenceName", String.class, true);
           infoFactory.addAttribute("batchSize", int.class, true);
   
  -        infoFactory.setConstructor(new 
String[]{"ManagedConnectionFactoryWrapper", "tableName", "sequenceName", 
"batchSize"});
  +        infoFactory.setConstructor(new String[]{"TransactionContextManager", 
"ManagedConnectionFactoryWrapper", "tableName", "sequenceName", "batchSize"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  

Reply via email to