Приложение FW/1 вызывает onApplicationStart при каждом запросе

У меня есть приложение FW/1 на Railo 4.2.2/Apache, и по какой-то причине оно вызывает onApplicationStart при каждом запросе. Я могу сказать, что это не какой-либо код повторной инициализации - поместите дамп callStackGet() в setupApplication и увидите, что корневой вызов выполняется onApplicationStart (а не через какой-либо хук инициализации). Есть ли какие-либо известные ошибки в Railo, которые могли бы вызвать это? Я дважды проверил тайм-аут приложения (1 день) и настройку FW/1 - он отключен, поэтому не должно быть причин, по которым приложение теряло бы область приложения при каждом запросе.

Я тоже наблюдаю еще одну странную вещь, но не знаю, связана ли она. В приложении установки я создаю новый пользовательский объект (через ORM) и сохраняю его, если локальный администратор не существует. Сбрасываю и вижу ID, но его нет в БД при запросе к таблице (да, я его сбросил). Попадание на следующую страницу снова создает пользователя (поскольку он еще не существует...).

Изменить: добавить сохраняемый объектный код для Адама.

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

}

person Todd Sharp    schedule 06.12.2014    source источник
comment
Вы устанавливаете имя приложения?   -  person Bernhard Döbler    schedule 07.12.2014
comment
Согласен с Bardware, если вы не устанавливаете имя приложения или каждый раз устанавливаете его случайно, это может вызвать такое поведение.   -  person Adam Tuttle    schedule 07.12.2014
comment
Что касается вашей ошибки создания пользователя ORM, опубликуйте код man.   -  person Adam Tuttle    schedule 07.12.2014
comment
Имя приложения задано, да. И нет, нет дублирующих приложений, работающих локально. @AdamTuttle, да ладно, чувак, ты же знаешь, я знаю, как создать и сохранить простого пользователя;)   -  person Todd Sharp    schedule 07.12.2014
comment
Обычно я давал вам презумпцию невиновности, правда. Но если вы не хотите публиковать код, как вы можете рассчитывать на помощь? В любом случае, чтобы определить, является ли это какой-то ошибкой с созданием сущностей в onApplicationStart (который вызывает setupApplication FW/1), попробуйте переместить тот же код в index.cfm или что-то в этом роде. Дважды проверьте, что это не ваш код сохранения. Думайте как ученый и изолируйте эти переменные.   -  person Adam Tuttle    schedule 07.12.2014
comment
Код добавлен. Ввод ерунды, чтобы добраться до минимальных символов...   -  person Todd Sharp    schedule 07.12.2014
comment
FWIW - у меня это работало плавно на ACF 10 несколько дней назад.   -  person Todd Sharp    schedule 07.12.2014
comment
Итак, проблема с перезагрузкой приложения больше не возникает. Мне было интересно, не застряло ли что-то в кеше шаблонов, что вызывало эту проблему, и я предполагаю, что это было так. Итак, получите это. Пользователь сохраняется, если я делаю ormExecuteQuery, он возвращает запись, НО - когда я запрашиваю таблицу в рабочей среде MySQL, я не получаю записей (я трижды проверил, что я в правильной схеме).   -  person Todd Sharp    schedule 07.12.2014
comment
Сомневаюсь, что это повлияет на ваши результаты, но из любопытства, почему вы не выполняете начальный поиск администратора с условием bf.getBean('userService').getByUsername('admin')? Я не вижу никаких красных флажков в вашем коде; но тогда я не добавляю ORM в onApplicationStart. Вы пытались перенести это в файл представления, чтобы изолировать код от события? Попробуйте определить, какая комбинация вызывает это: Railo+Application.cfc+ORM? Рейло+ФВ/1+ОРМ? Railo+Application.cfc+FW/1+ORM? Также может быть полезно поделиться вашей конфигурацией this.ormSettings.   -  person Adam Tuttle    schedule 07.12.2014
comment
Это одноразовый код, просто подумал, что он должен работать.   -  person Todd Sharp    schedule 07.12.2014
comment
Похоже, вы можете заглянуть в FW/1 и найти все, что может запустить onApplicationStart. Не может быть так много   -  person James A Mohler    schedule 07.12.2014
comment
Какие у вас настройки ORM? Вы пытались обернуть новый/сохранить/сбросить код в transaction{}?   -  person CfSimplicity    schedule 10.12.2014


Ответы (1)


Я думаю, что невозможность сохранения в БД может быть регрессионной ошибкой в ​​Railo 4.2.2. См. https://issues.jboss.org/browse/RAILO-3279.

Попробуйте обернуть сохранение/сброс в транзакцию:

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

Обычно вам не нужны оба. Либо транзакция, либо ormFlush должны сделать его постоянным.

person CfSimplicity    schedule 12.12.2014