Приложение FW/1 вызывает приложение ApplicationStart при каждом запросе
У меня есть приложение FW/1 на Railo 4.2.2/Apache и по какой-то причине оно вызывает onApplicationStart
на каждый запрос. Я могу сказать, что это не какой-либо код повторного набора - положить в callStackGet()
сбросить setupApplication
и может видеть, что корневым вызовом является onApplicationStart (не через какой-либо хук инициализации). Есть ли известные ошибки в Railo, которые могли бы вызвать это? Я дважды проверил время ожидания приложения (1 день) и настройку FW/1 - она отключена - поэтому не должно быть никаких причин, по которым приложение будет терять область приложения при каждом запросе.
Есть еще одна странная вещь, которую я вижу, но я не знаю, что это связано. В приложении настройки я создаю новый пользовательский объект (через ORM) и сохраняю его, если локальный администратор не существует. Я выкидываю его и вижу идентификатор, но его нет в базе данных, когда я запрашиваю таблицу (да, я его сбросил). Следующий удар по странице снова создает пользователя (поскольку он еще не существует...).
Редактировать: Добавить постоянный объектный код для Адама.
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 ответ
Я думаю, что сбой при сохранении в БД может быть ошибкой регрессии в Railo 4.2.2. См. https://issues.jboss.org/browse/RAILO-3279
Попробуйте включить сохранение / сброс в транзакцию:
transaction{
entitySave( user );
ormFlush();
}
Обычно вам не нужны оба. Либо транзакция, либо ormFlush должны сохранить ее.