Oracle Application Server и MyFaces - глюк при одновременной работе с одним и тем же набором данных?
Уже несколько дней бьюсь над решениемп проблемы и все никак :( Проблема вот в чем.
Есть приложение Интернет-Банк. Клиенты банка регистрируются, привязывают счета к своему пользователю в Интернет-Банке и после могут проводить различные операции с этими счетами: перевод денежных средств, просмотр движения по счетам.
Каждый перевод денежных средств (далее платеж) должен быть авторизован -подписан ЭЦП. ЭЦП находится в персональном сертификате пользователя, который загружается в браузер.
Опишу примерный вид экрана "Платежи" - на экране таблица, каждая строка - один платеж (краткая инфа о нем), сбоку (в той же строке) ссылки с действиями, доступными данному пользователю (роли) для данного платежа.
Сейчас потребовалось реализовать в этом приложении многоуровневую авторизацию - точнее, трехурвоневую. Есть Оператор (заводит платежи, не подписывает, а просто сохраняет), Бухгалтер (первая подпись), Менеджер (вторая и окончательная подпись и отправка его на обработку в банк). Так вот, при тестировании создала 3 пользователей - по одному для каждой роли. То есть 3 пользователя одновременно работают с одними и теми же платежами. И здесь началось самое интересное. Работаю под Бухгалтером. Стоит только октрыть другое окошко браузера под ролью Менеджер, как ссылки в окошке, в котором работает Бухгалтер, "волшебным" образом перестают работать - например, при нажатии ссылки "Подписать платеж", не появляется экран, где собственно и нужно его подписать, а перегружается страница с платежами и ссылка "Подписать" сменяется на "Снять подпись", как будто платеж подписан. Но на самом деле никакой подписи у платежа нет, так как не выбиралась она, собственно из хранилища сертификатов в браузере....
Обратила внимание, если работать одновременно с тем же набором данных, нос разных компьютеров, ситуация такая же. Если же набор данных разный, то все ок - ссылки не глючат.
Расскажу, как это реализовано. Сервер приложений - Oracle Application Server 10.1.3. База данных - Oracle 11g. Приложение само: интерефейсная часть написана на myFaces 1.1.7 + Facelets + tomahawk+sandbox. Бизнес-логика написана на EJB 3.0. Платежи лежат в таблице TRANSFERS, подписи платежей - в отдельной таблице TRANSFER_SIGNATURES.
Думала сначала, что h:commandLink (все ссылки) глючит внутри h:dataTable - решается вроде переводом бина из Request scope в Session scope. Но все бины (список платежей и текущий платеж) в сессии.
Прологировала. Поставила листенер на все jsf. Получила, что при нажатии ссылки (глючный вариант) в request-е есть все необходимые параметры. Но дальше почему-то не добавляется event в очередь событий для UIViewRoot. Почему не добавляется, так и не поняла.... :(( Что делать, ума не приложу? Неужели блокировать весь набор данных (все платежи) на время работы одного пользователя? Нехорошо....
Господа, если есть идеи, поделитесь, пожалуйста... Может, чего-то очевидного не вижу?
Заранее огромное спасибо :)
Есть приложение Интернет-Банк. Клиенты банка регистрируются, привязывают счета к своему пользователю в Интернет-Банке и после могут проводить различные операции с этими счетами: перевод денежных средств, просмотр движения по счетам.
Каждый перевод денежных средств (далее платеж) должен быть авторизован -подписан ЭЦП. ЭЦП находится в персональном сертификате пользователя, который загружается в браузер.
Опишу примерный вид экрана "Платежи" - на экране таблица, каждая строка - один платеж (краткая инфа о нем), сбоку (в той же строке) ссылки с действиями, доступными данному пользователю (роли) для данного платежа.
Сейчас потребовалось реализовать в этом приложении многоуровневую авторизацию - точнее, трехурвоневую. Есть Оператор (заводит платежи, не подписывает, а просто сохраняет), Бухгалтер (первая подпись), Менеджер (вторая и окончательная подпись и отправка его на обработку в банк). Так вот, при тестировании создала 3 пользователей - по одному для каждой роли. То есть 3 пользователя одновременно работают с одними и теми же платежами. И здесь началось самое интересное. Работаю под Бухгалтером. Стоит только октрыть другое окошко браузера под ролью Менеджер, как ссылки в окошке, в котором работает Бухгалтер, "волшебным" образом перестают работать - например, при нажатии ссылки "Подписать платеж", не появляется экран, где собственно и нужно его подписать, а перегружается страница с платежами и ссылка "Подписать" сменяется на "Снять подпись", как будто платеж подписан. Но на самом деле никакой подписи у платежа нет, так как не выбиралась она, собственно из хранилища сертификатов в браузере....
Обратила внимание, если работать одновременно с тем же набором данных, нос разных компьютеров, ситуация такая же. Если же набор данных разный, то все ок - ссылки не глючат.
Расскажу, как это реализовано. Сервер приложений - Oracle Application Server 10.1.3. База данных - Oracle 11g. Приложение само: интерефейсная часть написана на myFaces 1.1.7 + Facelets + tomahawk+sandbox. Бизнес-логика написана на EJB 3.0. Платежи лежат в таблице TRANSFERS, подписи платежей - в отдельной таблице TRANSFER_SIGNATURES.
Думала сначала, что h:commandLink (все ссылки) глючит внутри h:dataTable - решается вроде переводом бина из Request scope в Session scope. Но все бины (список платежей и текущий платеж) в сессии.
Прологировала. Поставила листенер на все jsf. Получила, что при нажатии ссылки (глючный вариант) в request-е есть все необходимые параметры. Но дальше почему-то не добавляется event в очередь событий для UIViewRoot. Почему не добавляется, так и не поняла.... :(( Что делать, ума не приложу? Неужели блокировать весь набор данных (все платежи) на время работы одного пользователя? Нехорошо....
Господа, если есть идеи, поделитесь, пожалуйста... Может, чего-то очевидного не вижу?
Заранее огромное спасибо :)
