Транзакция не откатывается при программном срабатывании исключения во время выполнения

Я не мог понять, почему 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/, она должна работать.

Другие вопросы по тегам