Web-приложение Аукцион состоит из нескольких компонентов, которые показаны на следующей диаграмме. Это не является руководством по созданию всего приложения. В этом документе затронуты важные вопросы по разработке и проектированию, связанные с различными инструментами, предоставляемыми в данной рабочей среде. Эти знания вы затем сможете применить при разработке собственных Web-приложений.
ОбъектыJavaBeans (EJB) предоставляют удобный способ доступа приложений на Java к данным, которые содержатся в реляционных базах данных. Сущностные объекты EJB можно разрабатывать с постоянным соединением, управляемым EJB (BMP), или с постоянным соединением, управляемым контейнером (CMP). CMP обеспечивает большую гибкость по сравнению с BMP, поскольку EJB-контейнер выполняет все относящиеся к базе данных вызовы, как указано объектом EJB. По умолчанию, инструменты в рабочей среде Rational создают сущностные объекты EJB с CMP. Сущностный объект EJB с CMP не содержит кода доступа SQL. Это позволяет развертывать объект EJB на других серверах J2EE, использующих различные базы данных. При этом не требуется изменять исходный код.
Существуют различные подходы к отображению объектов на реляционные базы данных, такие как 'сверху вниз', 'снизу вверх' и 'от середины'. При использовании метода 'сверху вниз' работа начинается с существующими объектами, потом при необходимости определяются уровни с последовательно увеличивающейся детализацией и затем на последнем этапе разрабатывается база данных. В методе 'снизу вверх' используется существующая схема базы данных, а затем разрабатываются зависимые уровни, определяющие объекты. В методе 'из середины' используются существующая база данных и существующие объекты, а затем разрабатываются промежуточные уровни для сопоставления объектов соответствующим таблицам базы данных.
При разработке сущностных объектов EJB в приложении Аукцион применяется метод 'снизу вверх'. База данных Derby существовала изначально и содержала таблицы, непосредственно соответствующие необходимым объектам EJB. После создания соединения с базой данных с помощью мастера соединения с базой данных был использован мастер отображения EJB на RDB для создания объектов EJB, которые преобразуются из одной или нескольких таблиц, с несколькими исключениями. На следующем рисунке показаны объекты EJB, которые используются в приложении Аукцион, а также взаимосвязи между ними.
Удаленный клиент не получает прямой доступ к сущностным объектам EJB в приложении Аукцион. Все запросы и ответы управляются фасадами сеансов, и для доступа к данным сервера применяются объекты EJB. Это обеспечивает общий доступ к постоянному хранилищу данных на стороне сервера. Фасады сеансов обсуждаются более подробно в следующем разделе.
Дополнительная информация по отображению сущностных объектов EJB приведена в разделе справки Создание преобразования 'снизу-вверх'.
Фасад сеанса представляет собой интерфейс между клиентом и сервером, предоставляющий связь с компонентами SDO и, в конечном счете, с базой данных. Использование фасада сеанса полезно, если клиентом отправляются запросы, для выполнения которых требуется несколько объектов. Отправка этих запросов к объектам по отдельности может увеличить поток данных в сети и латентность. Фасад сеанса действует как буфер между двумя сторонами, принимая общий запрос от клиента, а затем отправляя конкретные запросы необходимым объектам. Это уменьшает поток данных и упрощает разработку клиента.
Группируя объекты EJB и используя два различных фасада, можно увеличить производительность приложения, поскольку пользователи получают доступ только к тем объектам EJB, которые им требуются. Фасадом системы управляются сущностные объекты EJB, такие как Категория, которые контролируют работу самого Web-сайта.
Объекты EJB, на которые указывает фасад, выбираются по одному с помощью мастера Создать фасад сеансового EJB, как показано на следующей диаграмме. Ссылки на объект EJB могут при необходимости содержаться в нескольких фасадах. В приложении Аукцион это отсутствует.
Можно добавлять дополнительные функции, добавляя методы к фасадам. Например, в пользовательском интерфейсе существует один метод, который возвращает список пользователей, и другой метод, который возвращает список активных пользователей. Используя в качестве примера эти методы, можно добавить к пользовательскому фасаду еще один метод, который возвращает список всех пользователей, которые помечены как неактивные.
Более подробная информация о фасадах сеансов находится в представленном на обсуждение документе "Шаблоны проектирования: Фасад сеанса", который находится по адресу http://java.sun.com./.
Панель навигации инструмента Проектировщик Web-сайтов обеспечивает визуальное представление о разметке сайта. С ее помощью можно просмотреть отдельные страницы и их иерархию, а также управлять разметкой и организацией страниц в пределах сайта. При перемещении страниц в редакторе управляющие элементы навигации в шаблонах страниц автоматически обновляются. Например, с помощью структуры навигации Аукциона, показанной на следующей диаграмме, можно изменить порядок вкладок навигации, поместив страницу Продажа перед страницей Обзор. Проектировщик Web-сайтов автоматически создает на всех страницах вкладки в правильном порядке. Для того чтобы изменения стали видны в запущенном приложении, повторно сохраните все страницы, которые используют шаблон навигации.
В дополнение к описанной выше панели Навигация, в Проектировщике Web-сайтов представлена панель Сведения, в которой дополнительные элементы страницы организованы в удобную редактируемую таблицу, как показано на следующем рисунке. С помощью этой таблицы можно легко обновить свойства страницы, такие как название, автор и метка навигации.
Дополнительная информация о применении Проектировщика Web-сайта для управления разметкой Web-сайта обратитесь к разделу электронной справки Создание структуры Web-сайта.
Рабочая среда поставляется с визуальным проектировщиком для разработки шаблонов страниц, а также самих Web-страниц.
Шаблоны страниц представляют собой многоразовые отрывки кода содержимого, которые обеспечивают обычный вид и поведение разделов Web-сайта. Для того чтобы иметь общий вид, Web-страницам необходимо только ссылаться на шаблоны. Применение шаблонов дает преимущества как пользователю, обеспечивая легкую навигацию по Web-сайту, так и разработчику, которому требуется написать только код для определенной страницы.
Шаблоны страниц также облегчают обслуживание содержимого Web-сайта. Изменения в файле шаблона автоматически отражаются на всех страницах, которые ссылаются на этот файл. Например, в Web-приложении Аукцион шаблон maintemplate.jtpl обеспечивает общую разметку страниц Аукциона. В шаблон можно добавлять элементы Web-страниц, используя палитру в Проектировщике страниц, перетаскивая элементы из палитры на Web-страницу. Необходимый код HTML генерируется автоматически. Таким образом можно легко изменить шаблон Аукцион, например, для включения в нижний колонтитул текущей даты и времени.
Вставив тег, который вызывает шаблон, вместо того чтобы жестко кодировать навигацию, можно включить одну и ту же панель навигации на все страницы сайта. Редактор отображения шаблона вставляет ссылки на шаблон на Web-страницу.
Динамические шаблоны продвигают эту технологию на шаг дальше. Например, они позволяют изменять содержимое Web-страницы на основании ролей или возможностей пользователей, либо вставлять на Web-страницу, относящуюся к конкретному пользователю информацию. В примере Аукцион применяются динамические шаблоны для предоставления административных ссылок в панели навигации только для пользователей, вошедших в систему в качестве администраторов, и для изменения кнопки "Вход в систему" на "Выход из системы" после успешного входа пользователя в систему.
Более подробная информация о создании шаблонов Web-страниц приведена в разделе справки Создание шаблона страниц.
JavaServer Faces (JSF) представляют собой технологию, которая помогает в создании пользовательских интерфейсов для динамических Web-приложений, которые выполняются на сервере приложений. JSF является языком открытого стандарта и использует стандартную библиотеку тегов JavaServer Faces. Теги вставляются в код HTML для создания динамических Web-страниц.
Структура JSF управляет состояниями пользовательского интерфейса через запросы сервера и предлагает простую модель разработки для управления событиями на стороне сервера, которые активируются клиентом. Например, JSF может иметь заданное поведение для определенных событий, например, нажатий кнопок. Проектировщик страниц имеет визуально отображаемые в палитре встроенные функции, которые можно перетаскивать на Web-страницу. Благодаря этим переносимым функциям легко использовать JSF, HTML и другие элементы сценариев. Это полезно не только для управления основными функциями поля, такими как тип значения текстового поля (целочисленное, алфавитно-цифровое), но также позволяет устанавливать правила проверки. В проектировщике страниц управляющие элементы JSF можно связать с данными SDO, относящимися к каждой странице.
Палитру Проектировщика страниц можно использовать для добавления дополнительных функций на страницы JSF. Например, можно добавить кнопку "Купить сейчас" на страницу сведений об элементе, чтобы предоставить пользователю возможность купить элемент по цене, установленной продавцом.
На следующем рисунке показаны управляющие элементы JSF для страницы сведений Аукциона. Ввод в поле newbid inputText ограничен только целыми значениями с помощью переключателя Только целые значения, как показано в нижнем правом углу рисунка. Поле inputText имеет дополнительные параметры для Проверки, Поведения и Специальных возможностей, как определено во вкладках под h:inputText на рисунке внизу слева. На вкладке Проверка определяются специальные правила проверки с помощью Java. Например, допустимым вводом для поля newbid inputText является ненулевое целое значение, большее стартовой цены и большее текущей цены плюс один.
Следующий код был сгенерирован для поля newbid inputText на странице itemdetails приложения Аукцион.
<h:inputText styleClass="inputText" id="newbid" required="true" size="14"> <f:convertNumber integerOnly="true" /> <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ? pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid : pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}"> </f:validateLongRange> </h:inputText>
Дополнительная информация по разработке файлов Faces JSP приведена в разделе справки по JavaServer Faces.
Web-служба разрабатывалась параллельно с Web-приложением, поскольку оно не зависит от этого Web-приложения - Web-служба является еще одним средством для доступа к бизнес-логике и не содержит всех функциональных возможностей Web-приложения. Более подробное описание этой части приложения Аукцион приведено в разделе Web-служба.