FW / 1应用程序在每个请求上调用应用程序启动

时间:2014-12-06 23:59:45

标签: orm cfml railo fw1

我在Railo 4.2.2 / Apache上有一个FW / 1应用程序,出于某种原因,它会在每个请求上调用onApplicationStart。我可以告诉它不是任何重新启动代码 - 放在callStackGet()中的setupApplication转储中,并且可以看到根调用是onApplicationStart(不是通过任何init挂钩)。 Railo中是否有任何已知的错误会导致此问题?我已经仔细检查了应用程序超时(1天)和FW / 1设置 - 它已关闭 - 因此应用程序没有理由在每次请求时丢失应用程序范围。

我也看到了另一件奇怪的事情,但我不知道它是相关的。在安装应用程序中,我正在创建一个新的用户对象(通过ORM)并在本地管理员不存在时将其保留。我转储它并查看ID,但当我查询表时它不在数据库中(是的,我刷了它)。下一页点击会再次创建用户(因为它还不存在......)。

编辑:为Adam添加持久化对象代码。

function setupApplication() {
    // bean factory should look in the model tree for services and beans
    var bf = new framework.ioc( "/com/sharp/model" );
    setBeanFactory( bf );
    ormReload();

    if( getEnvironment() == 'dev' ){
        writeLog('Checking for dev user');
        if( !arrayLen( ormExecuteQuery('from User where username = ?', ['admin']) ) ){
            var user = new com.sharp.model.user.User({username: 'admin', password: hash('p@ssw3rd'), isAdmin: true});
            entitySave( user );
            ormFlush();
            writeDump(user);
            writeDump(callStackGet());
            writeLog('User admin created')
        }
        else{
            var user = bf.getBean('userService').getByUsername('admin');
            writeLog('Dev admin user already exists.  Done.')
        }
        var auth = bf.getBean('userService').authenticate( 'admin', 'p@ssw3rd' );
    }

}

1 个答案:

答案 0 :(得分:0)

我认为未能持久保存到DB可能是Railo 4.2.2的回归错误。见https://issues.jboss.org/browse/RAILO-3279

尝试在事务中包装save / flush:

transaction{
    entitySave( user );
    ormFlush();
}

通常你不应该同时需要两者。交易或ormFlush应该使其持久化。