В.В. Кулямин - Технологии программирования. Компонентный подход (1134162), страница 76
Текст из файла (страница 76)
Так, легко могут бытьподдержаны: отображение данных всех объектов классов-наследников в одну таблицу,отображение объектов разных классов-наследников в разные таблицы, отображение данных полейобщего класса-предка в одну таблицу, а данных классов-наследников — в разные таблицы, атакже смешанные стратегии подобных отображений.В приложениях на основе Hibernate объекты одного и того же класса могут быть какхранимыми, т.е.
представляющими данные, хранящиеся в базе данных, так и временными, неимеющими соответствующих записей в базе данных. Перевод объекта из одного из этих видов вдругой осуществляется при помощи всего лишь одного вызова метода вспомогательного классасреды Hibernate.C помощью дополнительной службы NHibernate [7] возможности среды Hibernate могут бытьиспользованы и из приложений на базе .NET.275Java 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 конфигурационным файлам.Конфигурационные файлы более удобны для сложных приложений, поскольку сокращаютколичество мест, в которые нужно вносить модификации при изменениях в структуре базыданных или объектной модели данных приложения. В то же время применение аннотацийпозволяет обеспечить более быструю и удобную разработку небольших приложений.Среда SpringСреда Spring [9,13-15] представляет собой одну из наиболее технологичных на данный моментсред разработки Web-приложений. В ее рамках получили дальнейшее развитие идеиспециализации обработчиков запросов, использованные в Struts.
В Spring также используются276элементы аспектно-ориентированного подхода к разработке ПО, позволяющие значительноповысить гибкость и удобство модификации построенных на ее основе Web-приложений.Основная задача, на решение которой нацелена среда Spring, — интеграция разнородныхмеханизмов, используемых при разработке компонентных Web-приложений. В качестве двухосновных средств такой интеграции используются идеи обращения управления (inversion ofcontrol) и аспектно-ориентированного программирования (aspect-oriented programming, AOP).Обращением управления называют отсутствие обращений из кода компонентов приложения ккакому-либо API, предоставляемому средой и ее библиотеками. Вместо этого компонентыприложения реализуют только функции, необходимые для работы в рамках предметной области ирешения тех задач, с которыми приложению придется иметь дело.
Построение из этихкомпонентов готового приложения, конфигурация отдельных его элементов и связей между ними— это дело среды, которая сама в определенные моменты обращается к нужным операциямкомпонентов. Конфигурация компонентов приложения в среде Spring осуществляется при помощиXML-файла springapp-servlet.xml. Этот файл содержит описание набора компонентов, которыенастраиваются при помощи указания параметров инициализации соответствующих классов изначений своих свойств в смысле JavaBeans.Другое название механизма обращения управления — встраивание зависимостей (dependencyinjection) — связано с возможностью указывать в коде приложения только интерфейсы некоторыхобъектов, а их точный класс, как и способ их получения (создание нового объекта, поиск припомощи службы каталогов, обращение к фабрике объектов и пр.) — описывать только вконфигурационном файле.
Такой механизм позволяет разделить использование объектов и ихконфигурацию и менять их независимо друг от друга.Аналогичный механизм предполагается использовать и в рамках EJB 3.0 в следующем виде.При помощи конструкции @Resource Type object; некоторый объект может быть объявлен вкоде как подлежащий отдельной конфигурации, а в конфигурационном файле для объекта сименем object указывается его точный тип и способ инициализации.Аспектно-ориентированный подход к программированию основыван на выделении аспектов— отдельных задач, решаемых приложением — таким образом, чтобы их решение можно былоорганизовать в виде выполнения определенных действий каждый раз, когда выполняетсяопределенный элемент кода в ходе работы программы.
При этом действия в рамках данногоаспекта не должны зависеть от других аспектов и остальных действий, выполняемых программой.Не все задачи могут быть представлены как аспекты. Поэтому AOP-программа представляет собойкомпозицию из «обычной» программы, описываемой вне рамок AOP, и аспектных действий,выполняемых в определенных точках «обычной» программы. Такие действия называютуказаниями (advice), точки их выполнения в «обычной» программе — точками вставки(joinpoints), а наборы точек вставки, в которых должно выполняться одно и то же действие —сечениями (pointcuts).Примером указаний могут служить трассировка параметров вызова метода или проверкакорректности инициализации полей объекта. В качестве примеров точек вставки можно привестимомент перед вызовом определенного метода или сразу после такого вызова, момент послеинициализации определенного объекта или перед его уничтожением.
Сечения могут описыватьсяусловиями типа «перед вызовом в данном объекте метода, чье имя начинается на "get"» или«перед уничтожением объекта класса A со значением поля value, превышающим 0».Spring дает возможность определять сечения и указания, выполняемые в них, вконфигурационных файлах приложения.При помощи AOP в Spring реализована поддержка интеграции приложений с хранилищамиданных при помощи различных технологий, примерами которых являются JDO и Hibernate.
Длятого чтобы использовать любую такую технологию в приложении на основе Spring, достаточноиметь специализированный адаптер, который реализует интерфейс, предлагаемый Spring дляподдержки синхронизации данных между приложением и хранилищем данных. После указанияэтого адаптера в конфигурации приложения среда сама позаботится о том, чтобы всякий раз после277появления возможных различий между данными приложения и базы данных были вызваныметоды этого адаптера, копирующие новые данные в ту или другую сторону.Похожим образом поддерживается интеграция с различными реализациями служб поддержкитранзакций и декларативное управление транзакциями. Методам обычного класса Java вконфигурационном файле (или с помощью аннотаций Java 5) можно приписать определенныетранзакционные атрибуты, а также набор типов исключительных ситуаций, вызывающих откаттранзакции.
Для сравнения — в EJB 2.1 только исключения, чей тип является наследникомjava.lang.RuntimeException, java.lang.Error или javax.ejb.EJBException, вызываютавтоматический откат транзакции. Адаптер конкретной реализации службы транзакций такжеуказывается в конфигурации приложения.Использование обращения управления позволяет также упростить описание конфигурациисервлетов и контроллеров (Spring-аналог действий из Struts) и определение самих контроллеров.AjaxРассказывая о развитии технологий разработки Web-приложений, невозможно обойтивниманием набор техник, известный под названием Ajax [16,17] и используемый для снижениявремени реакции Web-интерфейсов на действия пользователя.Вообще говоря, Web-технологии не очень хорошо приспособлены для построенияпользовательского интерфейса интерактивных приложений, т.е.