Транзакция не откатывается при программном срабатывании исключения во время выполнения
Я не мог понять, почему after()
функция DBConnectionFilter
вызывается, когда выдается исключение времени выполнения. я ожидал onException()
вызываемая функция и откат транзакции. Но на самом деле происходит after()
Будет вызвана функция для фиксации транзакции и закрытия соединения с базой данных, после чего onException
вызывается функция из CatchAllFilter/ вид глобального фильтра /.
Класс AppControllerConfig:
public class AppControllerConfig extends AbstractControllerConfig{
public void init(AppContext context) {
add(new CatchAllFilter(), new DBConnectionFilter("default",true));
}
}
PeopleController создать функцию:
@POST
public void create() throws IOException {
String incomingPost = Util.read(getRequestInputStream());
Map[] people = JsonHelper.toMaps(incomingPost);
Person newPerson = new Person();
newPerson.fromMap(people[0]);
boolean response = newPerson.save();
//Making sure person info is persisted so that it can be Rolled back
if (response == true) {
throw new InitException("Rollback Transaction");
}
render("/system/RestIndex").noLayout().contentType("application/json");
view("jsonResponse", Person.findAll().toJson(true));
}
1 ответ
Итак, глядя на код ActiveWeb, я увидел, что транзакция сначала откатывается, а затем фиксируется. Я бы предположил, что после отката транзакции драйвер откажется от данных, которые еще не были зафиксированы, но в моих тестах этого не произошло с MariaDB/MySQL. Другими словами, я повторил эту проблему на своем ноутбуке с помощью простого проекта ActiveWeb. Таким образом, эта ошибка была подана: https://github.com/javalite/activeweb/issues/389 и уже исправлена. Вы можете получить новую версию 2.1-SNAPSHOT с: http://repo.javalite.io/org/javalite/activeweb/, она должна работать.