понедельник, 1 октября 2007 г.

Вывод ревизии subversion в приложениях Apex.

Как уже упоминалось ранее, зачастую приложение разворачивается на нескольких площадках. Соответственно, вполне логична ситуация, когда на двух и более площадках будут находиться различные версии одного и того же приложения. Поэтому достаточно часто в GUI выводят этот самый номер версии и, как правило, весь этот GUI распространяется по площадкам с помощью системы управлениями версиями Subversion.

Далее будет рассматриваться ситуация, когда приложение Oracle Application Express находится под управлением системы контроля версиями Subversion и стоит задача вывести в интерфейс номер svn-ревизии приложения.

Теория
Суть решения заключается в использовании одной из функциональностей Subversion - Keyword Substitution, которая позволяет при сохранении изменений выполнять замены ключевых слов. То есть, в файле, находящемся под управлением Subversion, может выводиться информация о дате или авторе изменения, о номере ревизии и т.д.).

Решение поставленной задачи состоит из нескольких этапов:


  1. Объявить строку замены (Substitution String) в apex-приложении

  2. Изменить шаблон приложения таким образом, чтобы использовалась новая строка подстановки

  3. Включить функциональность Keyword Substitution для файла приложения в Subversion


Практика. Определение строки замены
Для того чтобы определить свою собственную строку замены, необходимо перейти в "Shared Components -> Application -> Definition":


где перейти в раздел "Substitutions" и добавить новую строку замены, например SVN_REV (значение этой строки важно и изменять его не следует - "$Rev $". Это связано с особенностями работы Subversion - см. документацию по Subversion. Keyword Substitution):


Теперь, если посмотреть файл экспорта приложения (как это сделать описывалось ранее), то можно увидеть приблизительно такие строки (можно найти поиском по фразе "svn"):

p_substitution_string_01 => 'SVN_REV',
p_substitution_value_01 => '$Rev: $',

То есть, значение строки подстановки в файле экспорта лежит в открытом виде, которое можно изменять как угодно. Это нам пригодиться.

Практика. Изменение шаблона
Для того чтобы вывести номер версии в GUI, необходимо изменить шаблон, который отвечает за общий вид формы. Для чего необходимо перейти в "Shared Components -> User Interface -> Templates" и выбрать шаблон страницы:




После этого, необходимо прописать в шаблоне созданную ранее строку подстановки "SVN_REV", например так:


Теперь при работе приложения в нижнем левом углу будет следующая картина:


Практика. Включение Keyword Substitution
Основная часть работы уже сделана. осталась малость - включить функцию "Keyword Substitution" для файла, в котором располагается описание нашего приложения. Допустим, файл нашего приложения называется "apex_app.sql". Тогда включение будет выглядеть так:

drive:\path\to\svn\repository\svn propset svn:keywords "Date Revision Author" apex_app.sql

Вот и все. Теперь при каждом сохранении очередной версии файла apex-приложения будет вместо "$Rev $" прописываться актуальная версия файла в Subversion-репозитариии. То есть, в каждом файле приложения будет лежать строка подстановки с актуальной версией файла.
То есть, картинка в левом нижнем углу должна быть приблизительно такой:


Таким же образом можно выводить и последнего автора изменений или дату последнего сохранения в репозитарии.

ps: прошу прощения за столь значительную задержку в публикациях, ибо после сезона отпусков случился аврал :(, что отрицательно сказалось на количестве свободных минут.

Подробнее...

понедельник, 23 июля 2007 г.

Изменения DBMS_SQL в Oracle 11g

Как уже говорилось ранее, объявлено о выходе новой версии Oracle. Соответственно, в сети появляется все больше и больше информации о нововведениях, идущих в одиннадцатой версии. Так, блуждая по сети, совершенно случайно наткнулся на новость о некоторых изменениях в спецификации пакета dbms_sql.
В небольшой заметке "Oracle 11G: describing a refcursor" говорится о двух новых методах пакета dbms_sql:

  • to_cursor_number, который преобразует refcursor в "dbms_sql cursor"(тот, что возвращает dbms_sql.open_cursor)

  • to_refcursor, который выполняет обратное преобразование, то есть, преобразует "dbms_sql cursor" в refcursor

Таким образом, теперь можно совместно использовать пакет dbms_sql и переменные типа Ref Cursor.

Подробнее...

среда, 11 июля 2007 г.

Релиз Oracle 11g

Свершилось! Состоялся релиз одиннадцатой версии Oracle. Соответственно, на OTN появилось много нового... Появилось много различных обзоров, среди которых стоит в первую очередь обратить внимание на:


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

Подробнее...

пятница, 29 июня 2007 г.

Релиз Apex 3.0.1

Cегодня состоялся релиз Oracle Application Express 3.0.1! Это первая заплатка к Apex 3.0., в которой представлены следующие основные изменения:


  • Возможность прямой установки в Oracle Database XE (версия 3.0 такой возможности не предоставляла)

  • Поддержка миграции из Oracle Database XE в Oracle Standart/Enterprise Edition 10.2.0.3

  • Поддержка интеграции с Oracle SQL Developer 1.2

  • Включена поддержка конфигурации Apache FOP для использования в качестве сервера отчетов для печати PDF

  • Различные улучшения в стабильности и безопасности

Ознакомиться с процессом установки заплатки и ошибками, которые она исправляет, можно в "patch set notes". Кроме того, о различиях между версиями APEX 2.1 and 3.0.1, а так же об обновлении с 2.1 на 3.0.1 можно узнать из статьи "Oracle Database XE and Application Express 3.0.1"

Скачать заплатку можно отсюда.
ps: судя по сообщениям форума, установка новой заплатки уже идет полным ходом и весьма небезуспешно.

Подробнее...

понедельник, 25 июня 2007 г.

Oracle выпускает плагин для Eclipse

Совсем недавно Oracle присоединилась к Eclipse Foundation... и вот результат - выпущен Oracle Database Plugin, расширяющий возможности Eclipse Data Tools Platform (DTP).
Плагин предоставляет следующие возможности:

  • соединение с БД Oracle версий 9iR2 и выше

  • просмотр объектов БД и навигация по ним

  • выполнение хранимых процедур и функций

  • графическое и текстовое представление планов выполнения

Инсталляция плагина очень проста (как и любого другого плагина для Eclipse). Необходимо либо прописать "http://download.eclipse.org/datatools/updates" в меню "Help->Software Updates->Find", либо скачать архив с плагином и распаковать его в директорию Eclipse. Работать с новым плагином можно будет после перезагрузки.

Информацию об установке и основных функциях можно получить на OTN. Кроме того, на OTN появилась соответствующая ветка форума, где, правда, пока мало информации, но, думаю, в перспективе, это будет первоисточник путей решений проблем с новым плагином.

Подробнее...

среда, 20 июня 2007 г.

Oracle 11g гредет....

Oracle официально объявила о дате выпуска очередной версии СУБД - Oracle 11g. Это событие запланировано на 11 июля 2007 года и пройдет оно в Нью-Йорке. На конференции OpenWorld (в октябре прошлого года) представители Oracle пролили немного света на изменения, которые войдут в 11ый релиз. Как всегда, обещаются улучшения производительности, масштабируемости и т.д. Кроме того, была обещана новая технология компрессии данных, которая позволит значительно сократить размер БД, и механизм хранения неструктурированных данных... Но что же нас ждет на самом деле? Узнать более подробную информацию о нововведениях можно узнать как минимум в двух местах:


Как всегда, много всяких улучшений и новинок, наиболее интересными среди которых мне показались следующие:
  • Новый тип данных "simple_integer". Переменные это типа всегда NOT NULL и работа с ними выполняется быстрее, чем с переменными типа PLS_INTEGER.

  • Серверный пул соединений (server-side connection pooling). Позволяет нескольким клиентам использовать один и тот же пул сессий(должен совпадать USERID). Клиенты могут соединяться/отсоединяться с БД без затрат на создание серверной сессии.

  • Кэширование результатов запроса. Результаты SQL-запросов кэшируются. Размер кэша устанавливает DBA. Включается функциональность для таблицы следующей командой:
     alter table _ТАБЛИЦА_ cache results 

  • Виртуальные колонки (Virtual columns). Виртуальные колонки представляют из себя функции.Соответственно, индексы по таким колонкам являются индексами над функциями. В выражениях могут использоваться: колонки таблицы, константы, SQL-функции или функции, созданные пользователем. Поддерживается так же секционирование. Виртуальные колонки не могут использоваться в индексно-организованных (index organized) или внешних (external) таблицах. Прямая запись для таких колонок не возможна.

  • Ключевое слово "super" для объектно - ориентированных DDL. Новое ключевое слово используется в экземплярах производного типа (перегруженного) для того, чтобы сослаться на базовый класс, от которого текущий был унаследован.

  • Ключевое слово "continue" в циклах. Без комментариев... :)... давно пора.

  • Хранилище XML (XML data storage). Начиная с 11ой версии, XML можно хранить как CLOB или бинарный тип данных.

  • Автоматическое секционирование. Автоматическое создание секций.

  • Порядок срабатывания тригера. Можно указывать порядок выполнения тригеров.

  • Невидимые индексы (Invisible indexes). Вместо того, чтобы удалять индекс, если он более (или пока) не нужен, можно просто сделать его невидимым. В результате при выполнении SQL-запросов этот индекс использоваться не будет.

  • Создание и перестроение индекса в online (create and rebuild index online). Создание и перестроение индекса может выполняться при выполнении DML операции над таблицей. Ранее для этого требовалась эксклюзивная блокировка. Кроме того, перестроение индекса (rebuild) быстрее, чем удаление (drop) и создание (create) индекса.

  • Использование последовательностей в PL/SQL. Ранее, для того, чтобы получить следующее значение из последовательности (sequence.nexval) необходимо было использовать явный или неявный курсор (SQL). Теперь курсор более не нужен, и следующий код будет работать:
    v_val := Sequence.nexval;

  • Read-only таблицы. К таким таблицам не применимы DML-операции, а так же select for update. Перевод в данный режим таблиц выполняется следующей командой:
     alter table _ТАБЛИЦА_ read only 

... т.д. Список, естественно, не полный. Окончательный будет известен только после официального релиза. Ждем....

Подробнее...

пятница, 15 июня 2007 г.

Apex. Фиксируем габариты отчета.

Читая один из англоязычных блогов по Oracle Application Express, наткнулся на одну интересную хитрость.
Суть проблемы заключается в том, что для отчетов с большим количеством записей есть только 2 пути для отображения:


  • либо настраивать постраничный вывод (pagination)

  • либо показывать все записи и позволять пользователю скроллировать страничку


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

  • в "Region Header": < div style="overflow: auto; height: 450px;"> , где вместо "450px" можно писать любую желаемую высоту отчета в пикселях.

  • в "Region footer": < /div >


А именно, необходимо найти описание отчета:

И прописать в соответствующие поля необходимые значения:


Результат, как всегда, можно посмотреть на apex.oracle.com

Подробнее...

воскресенье, 10 июня 2007 г.

Oracle SQL Developer 1.2

Вышла новая версия Oracle SQL Developer. Данная IDE становится все более привлекательной для разработчиков Oracle APEX в силу появления новых фич (анонсировалось в "Отчеты по Apex в SQL Developer" и "Apex и SQLDeveloper - интеграция продолжается").

Со списком новых функциональностей можно ознакомиться на сайте OTN - "Release Notes 1.2". Основными из них являются:


  • поддержка Oracle Application Express (некоторые отчеты, импорт / экспорт приложений)

  • поддержка миграции из сторонних баз данных в Oracle. Поддерживаются:

    • Microsoft Access: 97, 2000, 2002/XP, 2003

    • Microsoft SQL Server: 7, 2000, 2005

    • MySQL: 3, 4, 5

Подробнее...

вторник, 5 июня 2007 г.

Apex и SQLDeveloper - интеграция продолжается

Как уже упоминалось ранее, в последней версии Oracle SQLDeveloper появилась некоторая совместимость с Oracle Application Express. Как оказалось, это не последний шаг в интеграции!
На своем блоге, Крис Райс (принимает участие в разработке Oracle SQLDeveloper), озвучил несколько новшеств в грядущем обновлении. Они касаются экспорта/импорта приложений Apex. Ранее аналогичные манипуляции можно было выполнять только из самого Apex. Так же, Крис приводите несколько снимков, описывающих новшества:

Экспорт приложения:
export apex application

Импорт приложения:
import apex application

Настройки импорта:
apex application import option



Подробнее...

воскресенье, 3 июня 2007 г.

Развертывание приложений Apex : часть 2 (Import)

Продолжаем рассказ о развертывании приложений Oracle Application Express, начатый в заметке "Развертывание приложений Apex : часть 1 (Export)". После того, как приложение было экспортировано из Apex-репозитария на одном сервере, его необходимо проимпортировать в репозитарий другого сервера...

Импорт выполняется через "Application Builder"->"Import"->"Application", где необходимо указать путь к файлу, в котором находится описание импортируемого приложения, тип информации в файле и кодировку:
start to import apex application
Признаком успешного импорта файла в репозитарий является следующее сообщение:
success apex application import
Последним экраном импорта является описание установок развертывания приложения:
apex application deploy
,где:


  • Current Workspace - Название текущей рабочей области

  • Export File Workspace - Название рабочей области импортируемого файла экспорта

  • Export File Workspace ID - Идентификатор рабочей области импортируемого файла экспорта

  • Export File Application ID - Идентификатор приложения в импортируемом файле экспорта

  • Export File Version - Версия файла экспорта

  • Export File Parse As Schema - В рамках какой Oracle схемы выполнялся экспорт файла

  • Application Origin - Происхождение приложения

  • Parse As Schema - В рамках какой Oracle схемы будет выполнять разбор файла экспорта

  • Build Status - Статус приложения после импорта. "Run Application Only" - с приложением можно только запускать на выполнение. "Run and Build Application" - приложение можно как выполнять, так и изменять

  • Install As Application - Идентификатор для нового приложения. "Auto Assign New Application ID" - автоматическое присвоение нового значения для ID приложения. "Reuse Application ID ... From Export File" - использование того ID приложения, который был у него во время экспорта. "Change Application ID" - изменить ID приложения вручную.

Все загруженные файлы хранятся в отдельном репозитарии, посмотреть который можно в "Application Builder" -> "Export Repository". То есть, даже если после развертывания приложение было удалено по каким - то причинам, его можно по-новой развернуть на сервере без повторного испортирта файл.
Кроме возможности развертывания приложения, в репозитарии есть функция удаления файлов импорта. И если уж сам файл удален из репозитария, то для импорта приложения необходимо будет снова выполнить импорт файла на сервер.

Если вдруг, во время установки приложения появилось сообщение:

This page was exported from a different application or from an application in different workspace.
Page cannot be installed in this application.


то необходимо проверить, что ID рабочей области (Workspace ID), откуда экспортировалось приложение, отличается от ID рабочей области, куда приложение устанавливается. В этом случае, надо просто изменить его в файле экспорта на значение Workspace ID, куда устанавливается приложение. Для этого, необходимо найти в начале файла экспорта следующую строку:
wwv_flow_api.set_security_group_id(p_security_group_id=> _Число_);

И заменить "_число_" на значение "Workspace ID", куда устанавливается приложение. Если вы его по каким-либо причинам его не знаете, то просто экспортируйте что-нибудь из этой рабочей области и в начале файла экспорта, в той же строке, будет нужный идентификатор. То есть, приложения должны переноситься между серверами только в рамках одной и той же рабочей области.

В заключении надо сказать, что Oracle Application Express позволяет экспортировать/импортировать не только приложение, но и отдельные его части: страницы , темы оформления, значения по умолчанию, CSS и т.д. В случае экспорта страницы из приложения, необходимо учитывать так же, что на новом сервере должны совпадать не только ID рабочей области, но ID приложения (документация на OTN).

Подробнее...