29 авг. 2008 г.

Вышел патчсет 3.1.2 для Apex

Новость не особо радостная, но всё же. Вышел патчсет для апекса. Доступен как в виде полной инсатляции Apex 3.1.2, так и в виде патчсета для 3.1.1 (MetaLink Patch Number 7313609).

В списке фикснутых багов с ходу не увидел багу, с которой недавно столкнулся, но подробно не исследовал. А именно, что если создать процесс уровня приложения с типом On New Session: After Authentication, то в нем то ли пременная APP_USER не устанавливается, то ли сам процесс не запускается. Времени потестить не было. Но факт, что это штуковина у меня с ходу не завелась :( Или я не умею её готовить? :)

27 авг. 2008 г.

Полный список текстовых сообщений APEX


select * from flows_020100.wwv_flow_messages$

Здесь есть все сообщения Апекс. Чтобы перевести или изменить их, достаточно в Shared Components -> Text Messages создать сообщение для языка вашего приложения с соответсвующим именем wwv_flow_messages$.name и вашим текстом.

Обновилась документация по Apex

Обращаю внимание, что на днях обновилась документация по Apex 3.1. Новый список книг находится вот здесь. Страница на otn пока еще старая.

Кроме того, что доку привели к формату как в 11g, так еще изменили немного структуру. Например Apex API теперь находятся не в User Guide, а имеют отдельный API Reference

20 авг. 2008 г.

Apex. Саморегистрация пользователей.

Задача на первый взгляд простая. Сделать на сайте регистрацию пользователей. Делов то: нарисовал public page c нужными полями да кнопкой, которая всё это дело отправит в хранимую процедуру, которая в свою очередь создаст пользователя в базе.

Вот с последним как раз может возникнуть вопрос: как создать пользователя в apex с помощью pl/sql. Начнем с того, что в приложениях апекс могут использоваться разные схемы аутентификации. От используемой схемы как раз и зависит решение.
Например, если используется аутентификация на основе "Database Accounts", то достаточно будет создать пользователя в базе данных

execute immediate 'create user user_name identified by password';


Никаких привилегий при этом давать пользователю не нужно. После того как апекс проверит существование пользователя и соответсвие пароля для этого пользователя в базе данных, сессия будет продолжаться под пользователем APEX_PUBLIC_USER (в общем случае :)) Недостатки способа - почти никаких, за исключением того что владелец схемы , в которой находится процедура создания пользователя, должна иметь привилегию CREATE USER. Ну и обработка ошибок и контроль существующих аккаунтов основаны на внутренних механизмах Oracle.

Если используется схема аутентификации Application Express, то тогда пара пользователь-пароль будет проверяться по внутреннему репозиторию Apex. Чтобы создать в нем пользователя можно использовать API-функцию APEX_UTIL.CREATE_USER
Но тут возникнет проблема с недостаточными привилегиями, потому как выполняться процедура будет под анонимным пользователем apex (страница регистрации то у нас PUBLIC). Обойти это можно, предварительно залогинив пользователя с административными привилегиями с помощью функции APEX_CUSTOM_AUTH.LOGIN. Только после создания пользователя нужно не забыть сделать APEX_CUSTOM_AUTH.LOGOUT.
В этом варианте есть одна неприятность: из-за выполнения LOGIN забивается весь дополнительный вывод htp, который делается для обработки результатов регистрации. Во всяком случае у меня этот глюк обойти не удалось в своё время. Как при этом обрабатывать ошибки регистрации - я без понятия :)

Ну и третий вариант, создать собственную схему аутенификации, над которой можно иметь полный контроль. В этом варианте у вас будет своя таблица с пользователями и паролями (можно зашифрованными), в которую при регистрации новых пользователей можно просто вставлять записи. Этот вариант самый предпочтительный. А как создать свою схему аутентификации напишу позже, там ничего сложного :)

Остальные схемы (SSO, LDAP, DAD..) я не рассматриваю, потому что ни разу не встречал и ничего толком о них пока не знаю.

13 авг. 2008 г.

FlexBuilder на Linux

FlexBuilder 3 на Linux тормозит!
Создал давече на своей рабочей станции виртуальную машину с гигом памяти. Поставил туда xubuntu, дабы ресурсы сэкономить. Установил FlexBuilder. И получил среду, в которой что-то разработать нервов никаких не хватит!
Работает из рук вон медленно. Немного ситуацию подправил параметрами запуска eclipse'а.
В файле <FLEX_HOME>/Adobe_Flex_builder.sh в последней строчке, где запускается эклипс, прописать параметры в соотвествии со следующей рекоммендацией:




Общая память машины Параметры
512MB : -vmargs -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m
1024MB: -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m


Пробовал стартовать всё это добро на fluxbox'е ради экономии ресурсов, но быстро отказался. Сам флуксбокс конечно шустрее работает. Но заметной разницы в работе эклипса-флэксбилдера я не заметил.

Но лихо беде начало! Пробуем запустить лёгкое флэкс приложение в firefox с установленным девятым флэш-плеером, и получаем полную жопу. Холостое движение мышкой в области флэшки вызывает такие судороги системных ресурсов, что становится больно на это смотреть.

Я расстроен. На следующей неделе наверное попытаюсь всё это пустить мимо виртуальной машины, дома на убунте. Если памяти прикуплю конечно.