I am new to ibatis and using DAO and sqlMaps.  I am trying to perform multiple creates in a function and having them rollback if one of them fails.  The rollback does not seem to be performed.  Instead the creates up to that point are committed.  I apparently am not clear on what controls the commitment or rollback of multiple creates.  Here is the section of code from my program.  I am hoping that you can point out to me what I am doing wrong.

                try
                {
                        //Everything checks out, so add the new unit.
                        logger.finer("Starting transaction.");
                        startTransaction();

                        logger.finer("Creating unit manager role.");
                        roleDAO.create(namedUnitManagerRole);
                                        
                        logger.finer("Creating unit staff role.");
                        roleDAO.create(namedUnitStaffRole);
                                        
                        logger.finer("Creating unit manager user.");
                        userDAO.create(manager);

                        logger.finer("Granting unit manager role to user.");
                        userRoleDAO.create(userRole);
                                        
                        logger.finer("Creating Unit.");
                        unitDAO.create(newUnit);

                        logger.finest("Create unit/unit type cross-references.");
                        for ( int i = 0; i < unitToTypes.length; i++)
                        {
                                UnitToType newUnitToType = new UnitToType();
                                newUnitToType = (UnitToType)unitToTypes[i];
                        
                                unitToTypeDAO.create(newUnitToType);
                                                
                                logger.finest("Added UnitToType: " + newUnitToType);
                                
                                newUnitToType = null;
                        }
                        
                        commitTransaction();
                }
                catch(DuplicatePK e)
                {
                        try { endTransaction(); } catch (DaoException e1) {/*ignore*/}
                        throw new ItemExists("This unit already exists.",e);
                }
                catch(DuplicateConstraint e)
                {
                        try { endTransaction(); } catch (DaoException e1) {/*ignore*/}
                        DuplicateDescription e1 = new DuplicateDescription("Duplicate unit data in another record.",e);
                        e1.setFieldName(e.getFieldName());
                        throw e1;
                }
                catch(NullConstraintViolation e)
                {
                        try { endTransaction(); } catch (DaoException e1) {/*ignore*/}
                        NullFields e1 = new NullFields("A unit field has been left empty that should not be empty.",e);
                        e1.setFieldName(e.getFieldName());
                        throw e1;
                }
                catch(DaoException e)
                {
                        try { endTransaction(); } catch (DaoException e1) {/*ignore*/}
                        throw new ManagerException("Dao Exception in trying to create new unit." + e.getCause(),e);
                }
                finally
                {
                        endTransaction();
                }

Thanks,

Al Sapp

Reply via email to