---

ADF (Application Development Framework).

Введение.

 ADF (Oracle Application Development Framework) - это относительно новая среда разрабоки форм. Сейчас вокруг этой технологии довольно много шума, она позиционируется как основная среда разработки форм практически для всех продуктов Oracle.
 Теоретически эта технология в будущем может заменить OAF (Oracle Application Framework) в oebs, но скорее всего это будет не скоро, а если и будет, то возможно будет расширенна сама ADF, а не переписана OAF.
 ADF очень близка по сути к OAF, поэтому кто уже изучал OAF ему будет намного легче изучить ADF. В ADF такая же MVC архитектура, такие же компоненты bc4j для работы с базой данных, работа ведется в JDeveloper'е, единственное отличие - это механизм создания визуальных компонент форм.
 При активной работе с ADF имеет смысл закачать c официального сайта документацию, благо ее много. Документация по ADF входит в документацию по Oracle Appliactions Server, а так же и во многие другие документации по продуктам (например в документацию по SOA Suite).
 Вот официальная страница продукта, с нее можно легко выйти на различные материалы и документации по этой теме:
http://www.oracle.com/technology/products/adf/index.html

Инсталляция.

 Для разработки ADF приложений теоретически можно пользоваться любым JDeveloper-ом версии 10.1.3 и выше, так как эта технология входит в число стандартных (в отличии, например, от того же OAF).
 Теоретически опять же, можно пользоваться одним JDeveloper'ом и для OAF и для ADF, практически же, у нас с этим были большие проблемы. Выяснилось, что в одном JDEV_USER_HOME разные технологии точно не работают. У некоторых людей даже и на разных JDEV_USER_HOME в одном JDeveloper'е отказывались работать разные технологии.
 В общем, суть такова, если вы хотите в одном JDeveloper'е одновременно работать с разными технологиями, попробуйте создать новый JDEV_USER_HOME и bat-файл для запуска JDeveloper'а (как смотрите в статье по OAF). Если самые простые примеры работают и не вылетают страшные ошибки - все хорошо, если вылетают, предлагаю поставить еще один JDeveloper и в нем уже работать только с ADF.

Настройка соединение с БД.

Зайдем в закладку "Connections Navigator", выберем "Connections" и правой кнопкой мышки выберем "New Database Connection".



 И проверим соединение, нажав "Test Connection".

Создание нового проекта.

Зайдем в закладку "Applications Navigator", встанем на самый высокий уровень "Applications" и правой кнопкой мышки выберем "New Application".

Создание бизнес объектов.

Создание бизнес объектов (Entity, View и Application Module) будет схоже с тем что мы делали с статье про OAF.
 Встанем
на созданный нами уровень "Project1" и правой кнопкой мышки выберем "New->Business Tier->ADF Business Component->Business Component From Table".
 
Первым шагом нам будет предложено выбрать соединение с БД.


 

Шаг №3, где предлагается выбрать Read-Only View Object можно пропустить.

 Шаг №5, где предлагается создать Business Diagram можно пропустить.

Создание табличной JSF странички.

Встанем на созданный нами уровень "Project1" и правой кнопкой мышки выберем "New->Web Tier->JSF->JSF JSP".




 

Далее жмем "Готово".
 Разворачиваем наше дерево проекта и заходим в "Web Content". Там мы увидим созданную дизайнером JSP страничку-документ untitled.jspx.

 Развернем на закладке "Data Control Palette" объект AppModuleDataControl и перетащим наш XXTempUserView1 на страничку. Далее дело вкуса, дизайнер нам предложит создание формы, таблицы или дерева. Выберем, например, "Tables->ADF Read-Only Table".

 Далее появится дизайнерская форма редактирования строящейся нами таблицы. Сделаем ее с сортировкой и с секциями выбора, поставим галочки в нужных местах.

 Теперь встаем на свою страничку untitled.jspx и правой кнопкой мышки вызываем "Run".

Создание командных кнопок.

Теперь можно добавить кнопку, например, сохранения данных в БД. Для этого заходим на свою JSP страничку, разворачиваем на закладке "Data Control Palette" объект AppModuleDataControl, далее развернем папку "Operations" и перетащим команду "Фиксировать" на страничку. Нам дизайнер предложит создание либо кнопки, либо линка.
 Кнопка "Commit" создана!

 Если мы посмотрим ее свойства, а именно "Action Listener", то команда сохранения данных в БД будет выполняться макросом #{bindings.Commit.execute}. Но это не всегда удобно. Иногда хочется вставить свой код и управлять процессом, при этом тут нам поможет мастер, сделаем это через Manage Bean. Для этого мы в своем AppModule в AppModuleImpl.java должны создать свою функцию.
 Код будет следующим:

 Теперь двойным кликом мышью щелкнем по нашей кнопке, тем самым вызовем менеджер действий "Bind Action Property". Далее нажмем "New" и создадим свой Manage Bean. В поле "Name" введем "MY_ACTION1", в поле "Class" "am.AppModuleImpl" где хранится наша функция и нажмем "Ok".

 В списке "Method" выберем свой метод my_commit и нажмем "Ok", не убирая, галочки c Generate ADF Binding Code, чтобы мастер сделал все, что нужно за нас.
 Вот что получилось:

Размещение (Deploy).

Итак, мы создали и протестировали в JDeveloper'е наше приложение. Теперь разместим его на сервере. Есть несколько вариантов, выберем самый легкий.
 Встаньте на проект и выберите создание WAR-файла.
 WAR-файл - это стандартный файл для инсталляции java-приложений, типа инсталлятора, только для жабы. JDeveloper запакует в этот файл весь код, и его можно будет очень легко разместить на Oracle Applications Server (или на других серверах).
 В следующем окне смело жмем на "OK", а в следующем окне меняем название приложения и путь к приложению и тоже смело жмем на "OK":

 Первый этап пройден, теперь нам нужно создать коннект к нашему Application Server'у, war файл можно конечно разместить и из Application Server Control сервера, ручками, но, естественно, через JDeveloper это сделать будет легче.
 Итак встанем на проект, нажмем на "New" и создадим конектшен к OAS'у:


 Откроется мастер в первом окне определим имя конекшена и тип сервера (в моем случае это OAS 10.1.3):

 В следующем окне пишем имя и пароль администратора Application Server'а. Именно под этим именем мы входим в Application Server Control. Для Oracle Application Server имя практически всегда равно oc4jadmin.
 В следующем окне мы определяем место, куда будет размещено приложение. Весь сервер разбивается на oc4j инстанции (OC4J Instance) и мы можем разместить наше приложение в одно из таких инстанций. Инстанции можно посмотреть при входе в Application Server Control (я покажу это ниже). "OC4J Instance" - название такой инстанции. "Host Name" - ip'шник или имя сервера.
 "OPMN Port" - это порт, через который работает прога Oracle Process Manager and Notification Server, практически всегда он равен 6003. Если он не равен этому значению, то посмотреть его можно несколькими способами, например в файле "$ORACLE_HOME\opmn\conf\opmn.xml", в тэге "port", в свойстве "request".


 В последнем окне смело жмем на кнопку "Test Connection", если мы все сделали правильно, нам прийдет ответ "Success!"
 Теперь собственно разместим наше приложение встанем на появившеся файл с расширением ".deploy", и нажмем на нем правой кнопкой.
 В появившемся окне выберем опцию размещения на наш сервер.


 В появившемся окне жмем на "Ok" и отслеживаем в логе JDeveloper'а процесс деплоя. Если все нормально, то через какое-то время мы увидим в логе сообщение о полном размещении приложения.
 Все, теперь мы можем запускать форму. URL запуска должен выглядеть так "сервер/Context Root/faces/Название исполняемого файла", например, в нашем случае это будет такой урл: "http://soa-suite.local:7777/path_to_forma/faces/untitled1.jspx". В принципе, если ничего не менять, то этот урл можно получить из урла под которым запускалась наша форма, простой заменой localhost'а на имя (или ip) нашего Application Server'а.

 В заключении, зайдем в Application Server Control ("http://soa-suite.local:7777/em") и посмотрим, появилось ли наше приложение. Да, оно появилось, и кликнув на нем можно получить дополнительную информацию:

---

Используются технологии uCoz