Олег Иванов
oivanov@fors.com

В конце апреля компания Oracle (http://www.oracle.com) выпустила новую версию средства разработки Java-приложений JDeveloper 10g, встроив в нее технологию Application Development Framework (ADF), позволяющую полностью визуально разрабатывать любые программы, имеющие графический интерфейс. В предыдущих версиях JDeveloper часто приходилось либо писать код вручную, либо пользоваться нестандартными и медленно работающими библиотеками. В новой версии можно полностью визуально разрабатывать приложения для работы с базами данных, причем не только с сервером баз данных Oracle, но и с любыми реляционными базами.

JDeveloper 10g полностью написан на Java и может работать на любой платформе, для которой существует виртуальная Java-машина (JVM). Пакет можно загрузить с сайта http://otn.oracle.com и использовать его по лицензии Oracle TechNet, например, в ознакомительных целях. Oracle не защищает свои продукты ключами или кодами активации и не ограничивает период ознакомления. Установка продукта сводится к разархивированию скачанного файла в любую директорию.

История JDeveloper

Первая версия JDeveloper вышла в 1998 г. Она называлась AppBuilder 1.0 и, по традиции, как все первые версии ПО Oracle, считалась не релизом, а бета-версией. К выходу релиза, который получил номер версии 1.1, Oracle переименовала среду разработки в JDeveloper. Название оказалось настолько удачным, что не меняется уже шесть лет (для сравнения: вышедший примерно в то же время Oracle Application Server успел сменить название четыре раза).

Пакет JDeveloper 1.1 работал на последней в то время версии JDK 1.1 и занимал 50 Мбайт на жестком диске. Прототип среды был лицензирован у Borland (http://www.borland.com). Позже Borland/Inprise стала дорабатывать свою ветку программного продукта, который сейчас выпускается под названием JBuilder; по функциональности он схож с JDeveloper.

В процессе развития средств программирования интерфейс, набор возможностей и даже комбинации клавиш для быстрого вызова часто используемых функций стали унифицированными. Естественный отбор заставил разработчиков программных сред придавать своим продуктам стандартный набор возможностей. Благодаря этому программисты, имеющие опыт работы с одной оболочкой, могут быстро освоить другие. Помимо набора стандартных средств, среды разработки приложений включают библиотеки процедур, упрощающие программирование. Например, приложения, работающие с базами данных, в большинстве случаев состоят из стандартных форм, выдающих данные из строк таблицы. Для создания таких приложений на Java и предназначена среда разработки Oracle JDeveloper.

Структура приложения для работы с базами данных

На рис. 1 показана предлагаемая Oracle структура приложений для работы с данными. Отметим, что объекты ADF Entity и ADF View присутствовали и в предыдущей версии и назывались тогда Business Components for Java (BC4J). Компоненты представляют собой отражения таблиц базы данных, расположенные на стороне приложения и доступные локально. Например, если нужно вставить строку в таблицу, то вызывается метод (функция) на объекте Entity, так что программисту не нужно кодировать доступ к базе по JDBC. В сущности, это аналог EJB, DOA и других подобных технологий. Однако в предыдущей версии отсутствовал слой ADF Data Controls, который и позволяет создавать приложение полностью в визуальном режиме.

Fig.1
Рис. 1. Структура ADF-приложений.

В версиях JDeveloper 1.1-3.2 аналогом Data Controls были компоненты InfoBus. Технология InfoBus была разработана компанией Sun, но не получила распространения. ADF отличается от нее тем, что в InfoBus использовались модифицированные swing-компоненты, а в ADF источники данных привязываются к стандартным swing-объектам. Различные по своей сути технологии бизнес-уровня и графики были четко разделены, что дало возможность избежать ошибок и проблем с производительностью. Разработчики Oracle пришли к технологии ADF методом проб и ошибок. Просчеты на самом первом этапе моделирования технологической схемы привели к переработке всех последующих этапов.

Теперь и оконные, и Web-приложения можно создавать в визуальном режиме с высокой степенью автоматизации. Для этого подходят библиотеки тегов, разработанные Oracle, Apache или любые другие. В технологии ADF программист сначала создает бизнес-логику приложения. Например, если приложение будет работать с таблицами базы данных, то, чтобы не писать код запросов SQL вручную, можно использовать библиотеки BC4J. Программисту не нужно знать, как этот объект будет обновлять данные в таблице, он работает с ним как со стандартным Java-объектом. Большую часть логики можно настроить визуально, не написав ни строчки кода.

Процесс создания Web-приложения

Application workspace

Первый шаг - создание приложения (Application workspace). После запуска JDeveloper появится рабочая область со списком приложений, редактором кода и окном сообщений. Список приложений выдается в виде дерева и называется навигатором.

Рабочая область - это промежуточный уровень. Она будет содержать проекты, которые относятся к одному приложению, являются его частями или независимыми модулями. Допустим, разрабатывается отдельное Web-приложение и в нем есть ссылки на странички из других приложений. Если другое приложение находится в той же рабочей области, то при тестировании оба приложения будут загружены во встроенный контейнер Oracle Containers for Java (OC4J), и можно будет протестировать связи между ними.

Но чаще встречается другая ситуация. Приложение имеет несколько уровней - бизнес-логику и презентационную часть. Бизнес-логика может быть создана другой группой программистов и использовать специфические технологии. Если включить ее в проект как часть его, может возникнуть путаница - многим известно, что получается, когда пытаешься интегрировать чужой код в свое приложение. Отдельные проекты помогают сосредоточиться только на текущем задании, не вникая в особенности других модулей. В технологиях J2EE четко указываются конфигурационные файлы, которые нужно менять, чтобы настроить и использовать приложения J2EE. Для использования чужих модулей достаточно знать их спецификацию. Файлы конфигурации имеют легко читаемый формат XML, поэтому многие параметры интуитивно понятны.

Приложения и проекты

В Мастере Application workspace появилась возможность задать набор технологий, которые будут использованы в проектах приложения. Например, в workspace можно автоматически сгенерировать проекты с UML-моделью или конфигурацией Struts создаваемого приложения.

Второй шаг после создания Application workspace - добавление проекта в приложение. Проект - это набор исходных файлов и библиотек, которые должны совместно компилироваться и использоваться в работе приложения. Обычно проект содержит законченное приложение или модуль большого приложения, с которым можно работать независимо. Параметры проекта хранятся в одном XML-файле. Многие средства разработки имеют сходные конфигурационные файлы собственного формата. Эти файлы несовместимы друг с другом, так как возможности сред программирования различны и стандарта здесь не существует.

Соединение с базой данных MySQL

Третий шаг - создание соединения с базой данных, для работы с которой разрабатывается приложение. JDeveloper поддерживает любые базы данных, для которых существуют драйверы JDBC. Достаточно просто загрузить библиотеку драйвера (она обычно занимает 2-5 Мбайт и предоставляется на сайте производителя базы). Драйвер для собственной базы данных Oracle, разумеется, включила в дистрибутив JDeveloper.

Соединение создается в разделе Connections. Из рис. 2 видно, какие параметры нужно указать для подключения к базе данных MySQL. После создания соединения можно просматривать таблицы и при желании редактировать схему базы данных.

Fig.2 Рис. 2. Параметры соединения с MySQL.

JDeveloper может отображать схему любых реляционных баз данных в виде ER-диаграммы (рис. 3). Она по умолчанию не отображается при просмотре списка объектов. Нужно создать новую диаграмму объектов, перейти в раздел соединения, раскрыть дерево с таблицами схемы в любом из соединений, выделить все таблицы и перетащить в рабочую область диаграммы (на рис. 3 показан результат).

Fig.3 Рис. 3. ER-диаграмма схемы базы данных.

Часто у создателей JDeveloper не хватает времени для создания хорошей документации. Проблема в том, что для эффективного изучения среды разработки нужно показать, как выполнять стандартные действия. Для этого больше подходят флэш-ролики, а не статические страницы документации. Разработчики представили на сайте Oracle TechNet десяток роликов, которые демонстрируют некоторые (но не все) возможности среды разработки. Выпущен также курс обучения Oracle JDeveloper 10g: Build Applications with ADF.

Мастер логики приложения

После создания проекта можно вызвать Мастер конфигурации бизнес-компонентов (BC4J). Он подсоединится к базе данных и запросит список таблиц, с которыми будет работать приложение. JDeveloper хранит параметры соединения с базами данных. Их можно в дальнейшем использовать в процессе тестирования или для создания новых приложений. Помимо баз данных, можно хранить соединения с серверами приложений не только собственного производства, такими, как OC4J или iAS, но и Tomcat, JBoss, Orion. Соединение с серверами приложений позволяет легко установить в них Web-приложения прямо из JDeveloper.

Мастер BC4J отслеживает связи между таблицами базы данных и создает наборы объектов, которые точно отражают схему базы данных. На выходе Мастер создает конфигурационные файлы в формате XML и Java-классы. Наиболее часто встречающиеся параметры хранятся в XML-файлах. Их не нужно редактировать вручную, средствами JDeveloper это можно сделать визуально. Большая часть логики не требует написания кода, однако некоторые редко встречающиеся задачи обработки информации можно реализовать, добавив код в Java-файлы, которые создает Мастер BC4J.

Протестировать бизнес-логику компонентов BC4J можно с помощью простого swing-клиента, встроенного в JDeveloper. Он вызывается нажатием правой кнопки мыши через строчку "Test…" в выпадающем меню, если в навигаторе проектов выбрать модуль бизнес-компонентов. Отметим, что этот клиент не вынесен в меню и панель управления JDeveloper, и вероятность того, что его обнаружит программист, только начинающий работать с JDeveloper, весьма мала. Однако других недочетов такого типа в JDeveloper практически нет.

Диаграммы в JDeveloper

В JDeveloper есть мощная подсистема создания модели будущего приложения. Известно, что просчеты на этапе моделирования приводят к потере времени на последующих этапах разработки. Поддержка моделирования состоит из UML-диаграмм, диаграммы BC4J-компонентов, диаграммы XML-схем и компонентов Struts.

UML-диаграмма используется для моделирования Java-классов будущего приложения. Классы отображаются в виде прямоугольников со свойствами классов и связями между ними. При большом наборе классов диаграмма предоставляет программисту возможность взглянуть на приложение в целом, что повышает производительность разработки. На основе диаграммы можно сгенерировать Java-классы, которые появятся в текущем проекте.

BC4J-диаграмма позволяет смоделировать схему будущего приложения. Если в базе данных нет таблиц, т. е. разработка выполняется "с нуля", можно создать функциональную модель приложения. На основе BC4J-диаграммы можно создать объекты базы данных - таблицы, представления, ограничения целостности и сам набор BC4J-компонентов.

Одно из новшеств последней версии JDeveloper - визуальный редактор схем XML (рис. 4). Структура документов проста - это дерево, однако число ветвей в дереве большинства документов достаточно велико. Визуальный редактор делает создание схем комфортным. Формат XML известен уже несколько лет, но средств автоматизации создания документов до сих пор немного.

Fig.4 Рис. 4. Визуальный редактор XML-схем.

Интерфейсы

После визуальной настройки компонентов BC4J программист выбирает тип графического интерфейса: оконный или Web, а также технологию, с помощью которой будет реализована эта часть программы. Для Web-приложений можно использовать библиотеки тегов Apache Struts или Oracle UIX, а для оконных интерфейсов - компоненты awt или swing. Компоненты awt созданы раньше swing, и возможности их ограниченны, поэтому сейчас редко они используются в приложениях. Их имеет смысл применять, если создается приложение для работы апплетов в старых версиях JVM 1.1, где еще не было swing-компонентов. Эти версии до сих пор встречаются в браузерах, так как последняя версия виртуальной машины, которую выпустила компания Microsoft для своего браузера, основана на JDK 1.1.

Оконный интерфейс

Первый тип интерфейса - стандартное оконное приложение. В этом случае используют библиотеку графических компонентов, называющуюся swing. Библиотека содержит такие компоненты, как кнопки, текстовые поля, окна, панели. На рис. 5 (в правой части) в Data Control Palette видны отображения уровня модели ADF. При перемещении компонентов на поле графического редактора в центре рисунка JDeveloper автоматически добавит в программу код привязки.

Fig.5 Рис. 5. Визуальный редактор оконного приложения.

Web-интерфейс

Второй тип графического интерфейса - стандартные HTML-страницы. Конечно, они динамические, т. е. генерируются "на лету" и каждый раз имеют разное содержание. Вспомним, что Java как язык программирования стал популярным именно благодаря Интернету. На нем писались первые программы, оживлявшие Web-страницы, - апплеты. Позже появились другие технологии, и нишу апплетов заняла технология Macromedia Flash.

Другая технология, поставившая Java вне конкуренции, тоже пришла из глобальной сети. Это технология сервлетов и Java Server Pages (JSP). Когда мигающие картинки перестали быть новинкой и стали даже раздражать пользователей сети, возникла потребность в быстрой и удобной разработке программ для Web. На эту роль претендуют Perl, PHP, ASP и сервлеты/JSP. Именно сервлеты, часть технологии J2EE, позволяют быстро создавать мощные Web-приложения. В отличие от скриптовых языков, таких, как PHP, Java-программы сохраняют в памяти сервера состояние сессии каждого пользователя - значения переменных и любые данные, с которыми работает пользователь. Еще одно отличие состоит в том, что все запросы пользователей обслуживают нити, а не отдельные процессы. Это делает работу Java-приложений чрезвычайно быстрой.

Диаграмма связей компонентов Apache Struts представляет собой визуальный редактор файла конфигурации struts-config.xml (рис. 6). Этот файл используется для указания последовательности прохождения запросов пользователя и передачи управления различным JSP. Редактор параметров позволяет увидеть приложение в виде потоков событий.

Fig.6 Рис. 6. Визуальное редактирование конфигурации Apache Struts.

Компоненты Struts часто используются при создании Web-приложений на Java. Логика работы Web-приложений значительно отличается от логики клиент-серверных приложений. Если в последних в качестве объекта выступает форма, в которой задаются реакции на события пользователя, то в Web-приложениях пользователь имеет дело со статичными страницами. Логика работы Web-приложений заключается в переходе между страницами в зависимости от выбора, сделанного пользователем. Диаграмма логики Web-приложения включает страницы и условные переходы между ними или поток действий пользователя - clickstream. Диаграмма представляет собой уровень абстракции над самим кодом приложения. Аналогией может служить ER-диаграмма для создателей приложений, работающих с базами данных.

Компания Sun при разработке Java не учла, что на практике, создавая даже не самые сложные проекты, программисты будут вынуждены рисовать такие диаграммы. Поэтому в наборе стандартов, составляющих J2EE, диаграммы потока действий отсутствуют. Консорциум Apache предложил технологию, позволяющую при правильном использовании упростить создание Web-приложений. Помимо диаграммера в нее включено много других средств. Эта технология получила название Struts, или "подпорки". И они действительно "подпирают" технологию сервлетов/JSP.

Компиляция и тестирование

Последний этап - компиляции и тестирования приложения - проблем не вызывает. Встроенный компилятор и отладчик работает без ошибок. Для сложных проектов и создания рабочего дистрибутива JDeveloper предлагает собственные Мастера, но поддерживает и Apache Ant. Ant написан на Java и управляется конфигурационным файлом формата XML. В этом файле могут быть указаны практически любые действия для создания приложения (для программ на языке C используется термин make), например, компиляция и копирование исходных файлов, создание архивов, запуск программ.

JDeveloper 10g автоматически генерирует конфигурационный файл Ant и может его использовать в процессе тестирования приложения. Таким образом, большая часть свойств проекта может мигрировать в файл стандартного формата. Миграции способствует тот факт, что JDeveloper 10g не поддерживает виртуальную машину версии 1.5, которая сейчас находится в стадии бета-тестирования. Вероятно, силы создателей JDeveloper были брошены на доработку ADF-компонентов, и встроенный компилятор JDeveloper остался без изменений.

Тестирование приложения во встроенном контейнере OC4J проблем не вызывает. Конфигурационные файлы контейнера обновляются автоматически. Если возникают проблемы с подсоединением к базе данных, то нужно проверить параметры соединения в файле data-sources.xml.

Контейнеры для работы J2EE-приложений

При тестировании Web-приложений в JDeveloper автоматически запускается встроенный сервер приложений Oracle Containers for Java (OC4J). Нет необходимости устанавливать или конфигурировать дополнительное ПО, как иногда приходится делать с другими средствами разработки. OC4J не отличается от встроенного в Oracle Application Server 9iR2.

Java-программы не могут выполняться в операционной системе напрямую, для их выполнения требуется прослойка между приложением и ОС, называемая виртуальной машиной Java (JVM). Если в ОС установлена прослойка JVM, то в ней будут работать любые Java-программы.

Идея исполнения программ через дополнительную прослойку понравилась компании Sun; в итоге Web-приложения (например, сервлеты), не могут работать напрямую даже в виртуальной машине. Им требуются дополнительные функции, которые обеспечивают программы-"контейнеры". Поскольку большинство функций, таких, как прослушивание порта по протоколу HTTP, выдача страниц, проверка прав доступа, подсоединение к базам данных, используются почти во всех Web-приложениях, от программиста не требуется их реализовывать. Они уже написаны разработчиками контейнеров, так что программисту остается сконцентрироваться на написании логики своего приложения.

Самые известные контейнеры - это Apache Tomcat, JBoss, Ironflare Orion, Mortbay Jetty и OC4J. OC4J лицензирован Oracle у Ironflare и не сильно отличается от последнего. Это удобно тем, что почти вся информация об особенностях Orion, накопленная в сообществе программистов, применима к OC4J. Использование контейнеров сторонних разработчиков популярно в Java-сообществе. Например, Sun выбрала Tomcat как базовую платформу для тестирования новшеств J2EE, а JBoss в качестве ядра использует Jetty и Tomcat.

Все известные контейнеры сами представляют собой Java-программы. Получается, что для запуска Web-приложений нужна JVM, в которой будет работать контейнер, а в нем, в свою очередь, будут работать сервлеты. Может показаться, что это уменьшает скорость выполнения сервлетов, но на деле это не так. В исполняемых программах, написанных на языке C, имеются те же самые прослойки в виде программных интерфейсов API, только они находятся внутри программы или привязаны к ней. Программисту при этом приходится работать с кодом большого объема, и вряд ли он более опытен, чем создатели контейнеров. Поэтому вероятность ошибок в сервлетах оказывается намного меньше. Кроме того, код получается компактным. Все это удобно и для программиста, и для заказчика программ.

В целом от работы с JDeveloper 10g остается приятное впечатление. Среда содержит много возможностей, не видимых поверхностному взгляду. Технология разработки приложений ADF позволяет быстро и в визуальном режиме создавать сложные приложения.