Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Разрешить пользователям только 1 сеанс / 11 сообщений из 11, страница 1 из 1
19.10.2012, 16:07
    #38005967
Llanowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
Добрый день!

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Application Express 4.1.0.00.32

Авторизация и аутентификация пользователей настроена через стандартный механизм Апекса:
Home -> Administration -> Users

Проблема в том, что один пользователи бывают нетерпеливыми и нервными. Не дождавшись загрузки отчета, пытаются снова его сформировать. В итоге, один пользователь может наплодить одинаковых активных сессий. Выглядит это так:
APEX_PUBLIC_USER PETROV
APEX_PUBLIC_USER SIDOROV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV
APEX_PUBLIC_USER IVANOV

То есть, от ораклового пользователя APEX_PUBLIC_USER, выполняются активные сессии от 3-х пользователе Апекса (PETROV, SIDOROV, IVANOV). Но Иванов нервничает, тыркает по кнопкам, из-за того, что у него "долго грузятся отчеты" - плодит активные сессии, которые еще больше грузят сервер и усугубляют ситуацию.

Как сделать, чтобы оракловый юзер не мог плодить сессии - понятно (через профайл).

Но как сделать, чтобы от одного ораклового юзера могло работать сразу несколько разных апексовых пользователей?
И как сделать, чтобы один апексовый пользователь не мог плодить несколько активных сессий?

Может ли кто-нибудь подсказать или ткнуть, где написано?
...
Рейтинг: 0 / 0
19.10.2012, 17:46
    #38006152
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
LlanowarКак сделать, чтобы оракловый юзер не мог плодить сессии - понятно (через профайл).
Первое, что приходит в голову - сделать авторизацию и аутентификацию через пользователей БД. Задача сводится к предыдущей...
...
Рейтинг: 0 / 0
19.10.2012, 18:01
    #38006171
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
Llanowar,

Не позволяет апекс управлять созданием своих сессий.

Зато можете определить поведение Duplicate Submission в свойствах страницы.
И/Или не давать пользователю повторную отправку см. apex.submit + showWait
...
Рейтинг: 0 / 0
19.10.2012, 18:12
    #38006186
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
rockclimber,

Коннектится все равно будет под APEX_PUBLIC_USER, хоть какая там аутентификация и авторизация, так что не свести её к предыдущей задаче.
...
Рейтинг: 0 / 0
19.10.2012, 18:30
    #38006218
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
Llanowar,

Во время выполнения процесса показывать пользователю прогресс бар + сделать недоступными остальные элементы на странице. Похоже сделана операция импорта приложения в самом апексе.
...
Рейтинг: 0 / 0
21.10.2012, 11:19
    #38007089
Скороход
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
haXbatсделать недоступными остальные элементы на странице. Похоже сделана операция импорта приложения в самом апексе.
Поддерживаю. В нашем случае было еще хуже - данные успевали отправиться дважды, а ответ приходил небыстро. Поскольку то был инсерт, ситуация получалась плачевной. Блокируйте элементы.
...
Рейтинг: 0 / 0
23.10.2012, 17:52
    #38010369
Llanowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
Коллеги, спасибо за ответы!

Пока что сделал так:

Template Footer:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
<div id="dialog-confirm" title="Загрузка данных...">
    <p>Одну секундочку.. :)</p>
    <img src="#IMAGE_PREFIX#htmldb/icons/wait.gif" id="wait" />
</div>
<style>
.ui-dialog-titlebar-close{
    display: none;
}
</style>





Template header:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<script type="text/javascript">
function html_Submit_Progress(pThis){ 
$( "#dialog-confirm" ).dialog({
            resizable: false,
            height:100,
            modal: true,
        });
doSubmit('APPLY_CHANGES');  
}    
</script>



Button URL:
javascript:html_Submit_Progress(this);



В результате видно прогресс бар. Все остальное неактивно :)

...
Рейтинг: 0 / 0
24.10.2012, 04:29
    #38010763
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
LlanowarПроблема в том, что один пользователи бывают нетерпеливыми и нервными. Не дождавшись загрузки отчета, пытаются снова его сформировать.

Проблема в неблокирующем создании отчёта. А решать Вы почему-то стали через сессии... А потом и вовсе через блокирование интерфейса. Которое не помешает пользователю открыть ещё раз страницу в соседней вкладке или обновить эту же.

Сделайте собственный механизм блокировок. Сохраняйте где-нибудь признак того, что идёт расчёт/создание отчёта и т.п., проверяйте этот признак перед длительным действием. Переменная в сессии, строка в таблице или коллекции, глобальный контекст. Если не установлено — создание отчёта, установлено — сообщение пользователю, блокирование/скрытие кнопок.
...
Рейтинг: 0 / 0
27.10.2012, 19:37
    #38015713
Llanowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
suPPLer,

Спасибо за наводку. Попробую сделать, как появится время.
...
Рейтинг: 0 / 0
29.10.2012, 06:14
    #38016469
Полено
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрешить пользователям только 1 сеанс
suPPLer, приветствую.
ОФФТОП, но выйдите пожалуйста на связь любым доступным способом :)
...
Рейтинг: 0 / 0
29.10.2012, 21:26
    #38017768
Разрешить пользователям только 1 сеанс
Тогда вместо механизма блокировок лучше сделать полностью асинхронное получение отчётов. Пользователь ставить в очередь запрос на отчёт, по расписанию запускается процедура, которая генерирует отчеты на основе запросов из очереди, а пользователь потом может через какое-то время загрузить любой из сгенерированных отчётов. Примерно как в SQL Workshop-SQL Scripts есть скрипты запускаются в background. Но если всё дело лишь в том, что пользователь много кликает мышкой, то javascript - идеальный вариант
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Разрешить пользователям только 1 сеанс / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]