Lecture15 (1133572), страница 2
Текст из файла (страница 2)
Каждое правило относится кнекоторому множеству страниц и при выполнении определенного действия или наступлениисобытия предписывает переходить на некоторую страницу. Действия и события связываются сдействиями пользователя или логическими результатами их обработки (такими результатамимогут быть, например, успешная регистрация заказа в системе, попытка входа пользователя всистему с неправильным паролем и пр.).Технология Java Server Face версии 1.2 войдет в состав будущей версии 5.0 платформыJ2EE [6].Управление данными приложения. HibernateТехнологии обеспечения синхронизации внутренних данных приложения и его базы данныхразвиваются в настоящий момент достаточно активно.
Технология EJB предоставляетсоответствующие механизмы, но за счет значительного снижения удобства разработки имодификации компонентов. Обеспечение той же функциональности при более простойвнутренней организации кода является основным направлением развития в данной области.Возможным решением этой задачи являются объектно-реляционные преобразователи(object-relation mappers, ORM), которые обеспечивают автоматическую синхронизацию междуданными приложения в виде наборов связанных объектов и данными, хранящимися в системеуправления базами данных (СУБД) в реляционном виде, т.е. в форме записей в несколькихтаблицах, ссылающихся друг на друга с помощью внешних ключей.Одним из наиболее широко применяемых и развитых в технологическом плане объектнореляционных преобразователей является Hibernate [7-9].Базовая парадигма, лежащая в основе избранного Hibernate подхода, — это использованиеобъектов обычных классов Java (быть может, оформленных в соответствии с требованиямиспецификации JavaBeans — с четко выделенными свойствами) в качестве объектногопредставления данных приложения.
Такой подход даже имеет название-акроним POJO (plain oldJava objects, простые старые Java-объекты), призванное показать его отличие от сложных техникпостроения компонентов, похожих на EJB.Большое достоинство подобного подхода — возможность использовать один раз созданныенаборы классов, представляющих понятия предметной области, в качестве модели данных любыхприложений на основе Java, независимо от того, являются ли они распределенными илилокальными, требуется ли в них синхронизация с базой данных и сохранение данных объектовили нет.AuthorsBookAuthorsID : intFirstName : StringSurname : StringAuthorID : intBookID : intBooksID : intTitle : StringISBN : StringРисунок 80.
Реляционное представление данных о книгах и авторах.Например, для представления в объектном виде данных о книгах и их авторах,соответствующих показанной на Рис. 80 группе таблиц, могут быть использованы представленныениже классы.import java.util.Set;import java.util.HashSet;public class Author{private int id;private String firstName;private String surname;private Set books = new HashSet();public int getId (){ return this.id; }private void setId (int id) { this.id = id;}public String getFirstName (){ return this.firstName;}public void setFirstName (String firstName) { this.firstName = firstName; }public String getSurname (){ return this.surname;}public voidsetSurname (String surname) { this.surname = surname; }public Set getBooks (){ return this.books; }public void setBooks (Set books) { this.books = books; }}public class Book{private int id;private String title;private String isbn;private Set authors = new HashSet();public int getId (){ return this.id; }private void setId (int id) { this.id = id;}public String getIsbn (){ return this.isbn; }public voidsetIsbn (String isbn) { this.isbn = isbn; }public String getTitle (){ return this.title; }public voidsetTitle (String title) { this.title = title; }public Set getAuthors (){ return this.authors;}public void setAuthors (Set authors) { this.authors = authors; }}Для определения отображения объектов этих классов в записи соответствующих таблициспользуются конфигурационные файлы со следующим содержанием.
Первый фрагментпредставляет собой описание отображения объектов класса Author на записи таблицы Authors,которое обычно помещается в файл Author.hbm.xml.<hibernate-mapping><class name="Author" table="Authors"><id name="id" column="ID"><generator class="increment"/></id><property name="firstName" column="FirstName"/><property name="surname"/ column="Surname"><set name="books" table="BookAuthors" inverse="true"><key column="AuthorID"/><many-to-many column="BookID" class="Book"/></set></class></hibernate-mapping>Второй фрагмент представляет собой содержание аналогичного файла Book.hbm.xml,описывающего отображение объектов класса Book на записи таблицы Books.<hibernate-mapping><class name="Book" table="Books"><id name="id" column="ID"><generator class="increment"/></id><property name="title" column="Title"/><property name="isbn"/ column="ISBN"><set name="authors" table="BookAuthors" inverse="true"><key column="BookID"/><many-to-many column="AuthorID" class="Author"/></set></class></hibernate-mapping>При использовании объектов указанных классов в рамках приложения на основе Hibernateобеспечивается автоматическая синхронизация данных объектов с данными соответствующихзаписей, а также автоматическая поддержка описанного отношения типа «многие-ко-многим».Кроме того, Hibernate поддерживает удобные средства для описания сложных соответствиймежду объектами и записями таблиц при использовании наследования.
Так, легко могут бытьподдержаны: отображение данных всех объектов классов-наследников в одну таблицу,отображение объектов разных классов-наследников в разные таблицы, отображение данных полейобщего класса-предка в одну таблицу, а данных классов-наследников — в разные таблицы, атакже смешанные стратегии подобных отображений.В приложениях на основе Hibernate объекты одного и того же класса могут быть какхранимыми, т.е.
представляющими данные, хранящиеся в базе данных, так и временными, неимеющими соответствующих записей в базе данных. Перевод объекта из одного из этих видов вдругой осуществляется при помощи всего лишь одного вызова метода вспомогательного классасреды Hibernate.C помощью дополнительной службы NHibernate [7] возможности среды Hibernate могут бытьиспользованы и из приложений на базе .NET.Java Data ObjectsЕще более упростить разработку объектно-ориентированных приложений, данные которыхмогут храниться в базах данных, призвана технология Java Data Objects (JDO) [10,11].В ее основе тоже лежит использование для работы с хранимыми данными обычных классов наJava, но в качестве хранилища данных может выступать не только реляционная СУБД, но вообщелюбое хранилище данных, имеющее соответствующий специализированный адаптер (в рамкахJDO это должна быть реализация интерфейса javax.jdo.PersistenceManager).
Основнаяфункция этого адаптера — прозрачная для разработчиков синхронизация хранилища данных инабора хранимых объектов в памяти приложения. Он должен также обеспечивать достаточновысокую производительность приложения, несмотря на наличие нескольких промежуточныхслоев между классами самого приложения и хранилищем данных, представляемых ими.Использование JDO очень похоже на использование Hibernate. Конфигурационные файлы,хранящие информацию о привязке объектов Java классов к записям в определенных таблицах, атакже о привязке коллекций ссылок на объекты к ссылкам между записями, также похожи нааналогичные файлы Hibernate. Обычно первые даже несколько проще, поскольку большую частьработы по отображению полей объектов в поля записей базы данных берет на себяспециализированный адаптер.В дополнение JDO предоставляет средства для построения запросов с помощью описаниясвойств объектов, без использования более привычного встроенного SQL.В целом, подход JDO является обобщением подхода ORM на произвольные хранилищаданных, но он требует реализации более сложных специализированных адаптеров для каждоговида таких хранилищ, в то время как один и тот же ORM может использоваться для разныхреляционных СУБД, требуя для своей работы только наличия более простого драйвера JDBC.Enterprise Java Beans 3.0В рамках следующей, пятой версии платформы J2EE [6] будет использоваться новый набортехник для построения компонентов EJB — стандарт EJB 3.0 [12].Стандарт EJB версии 3.0 является существенным развитием EJB 2.1 в сторону упрощенияразработки и поддержки приложений, использующих технологию EJB.
При этом большинствонововведений основывается на тех же идеях, на которых строится работа с хранимыми данными врамках Hibernate и JDO. Гевин Кинг (Gavin King), создатель первых версий Hibernate, является иодним из разработчиков стандарта EJB 3.0.В рамках нового стандарта для создания компонента требуется описать только один класс,который не должен наследовать какому-то библиотечному классу или реализовывать какой бы тони было интерфейс. Объекты этого класса могут быть как хранимыми, так и временными.Различные описатели свойств компонента и его методов можно оформлять в виде аннотаций,стандартной конструкции для описания метаданных в Java 5. Примерами таких описателейявляются: указание вида компонента — компонент данных или сеансовый; отображение свойствкласса в поля таблиц и ссылки между ними; отметки нехранимых свойств и полей; отметкиспециальных методов, вызываемых при переходе между этапами жизненного цикла компонента;транзакционные атрибуты методов и пр.
Заметим, что в .NET использование для этого аналогованнотаций, атрибутов, уже реализовано. Остается и возможность использовать для этих целейXML-дескрипторы, аналогичные используемым в Hibernate конфигурационным файлам.Конфигурационные файлы более удобны для сложных приложений, поскольку сокращаютколичество мест, в которые нужно вносить модификации при изменениях в структуре базыданных или объектной модели данных приложения.