I seem to be getting automatic transactions when I use Spring DAOs generated by Abator even though my SqlMapConfig.xml contains the following.

  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
...

Here's the simple bit of code I'm using to test this. The change to addressId is persisted even though a RunTime exception is thrown inside the try and commitTransaction is not called. Any idea what I might be doing wrong?

    boolean problem = true;
    Person person = personDAO.selectByPrimaryKey(markId);
SqlMapClient smc = ((SqlMapClientDaoSupport) personDAO).getSqlMapClient();
    try {
      smc.startTransaction();

      person.setAddressId(addressId);
      personDAO.updateByPrimaryKey(person);
      System.out.println("updated address"); // This is output.

      // What happens if an exception occurs here?
if (problem) throw new RuntimeException("something bad happened");

      person.setHomePhoneId(homePhoneId);
      personDAO.updateByPrimaryKey(person);
      System.out.println("updated home phone"); // This isn't output.

      smc.commitTransaction();
    } finally {
      smc.endTransaction();
    }

Reply via email to