当以编程方式触发 运行 时间异常时,事务不会回滚

Transaction is not rolled back when run time exception programmatically fired

我无法理解为什么抛出运行时异常时调用DBConnectionFilterafter()函数。我期待调用 onException() 函数并回滚事务。但真正发生的是 after() 函数将被调用以提交事务并关闭数据库连接,然后调用全局过滤器/ CatchAllFilter/kind 中的 onException 函数。

AppControllerConfig class:

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));

}

所以,查看ActiveWeb的代码,我可以看到事务先回滚,然后提交。我假设一旦事务回滚,驱动程序将丢弃尚未提交的数据,但在我的测试中 MariaDB/MySQL 并没有发生这种情况。换句话说,我在笔记本电脑上用一个简单的 ActiveWeb 项目复制了这个问题。因此,提交了这个错误:https://github.com/javalite/activeweb/issues/389 and already fixed. You can pull a new 2.1-SNAPSHOT version from: http://repo.javalite.io/org/javalite/activeweb/,它应该可以工作。