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
можно пропустить.
Встанем на созданный нами уровень "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, чтобы мастер сделал все, что нужно за нас.
Вот что получилось:
Итак, мы создали и протестировали в 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") и посмотрим, появилось ли наше
приложение. Да, оно появилось, и кликнув на нем можно
получить дополнительную информацию: