Lecture15 (1133572), страница 3
Текст из файла (страница 3)
В то же время применение аннотацийпозволяет обеспечить более быструю и удобную разработку небольших приложений.Среда SpringСреда Spring [9,13-15] представляет собой одну из наиболее технологичных на данный моментсред разработки Web-приложений. В ее рамках получили дальнейшее развитие идеиспециализации обработчиков запросов, использованные в Struts. В Spring также используютсяэлементы аспектно-ориентированного подхода к разработке ПО, позволяющие значительноповысить гибкость и удобство модификации построенных на ее основе 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 дляподдержки синхронизации данных между приложением и хранилищем данных. После указанияэтого адаптера в конфигурации приложения среда сама позаботится о том, чтобы всякий раз послепоявления возможных различий между данными приложения и базы данных были вызваныметоды этого адаптера, копирующие новые данные в ту или другую сторону.Похожим образом поддерживается интеграция с различными реализациями служб поддержкитранзакций и декларативное управление транзакциями.
Методам обычного класса Java вконфигурационном файле (или с помощью аннотаций Java 5) можно приписать определенныетранзакционные атрибуты, а также набор типов исключительных ситуаций, вызывающих откаттранзакции. Для сравнения — в EJB 2.1 только исключения, чей тип является наследникомjava.lang.RuntimeException, java.lang.Error или javax.ejb.EJBException, вызываютавтоматический откат транзакции.
Адаптер конкретной реализации службы транзакций такжеуказывается в конфигурации приложения.Использование обращения управления позволяет также упростить описание конфигурациисервлетов и контроллеров (Spring-аналог действий из Struts) и определение самих контроллеров.AjaxРассказывая о развитии технологий разработки Web-приложений, невозможно обойтивниманием набор техник, известный под названием Ajax [16,17] и используемый для снижениявремени реакции Web-интерфейсов на действия пользователя.Вообще говоря, Web-технологии не очень хорошо приспособлены для построенияпользовательского интерфейса интерактивных приложений, т.е. таких, где пользовательдостаточно часто выполняет какие-то действия, на которые приложение должно реагировать. Ониизначально разрабатывались для предоставления доступа к статической информации, котораяменяется редко и представлена в виде набора HTML-страниц.
Обычно при обмене данными междуWeb-клиентом и Web-сервером клиент изредка посылает серверу простые и небольшие по объемузапросы, а тот в ответ может присылать достаточно объемные документы.В интерактивных приложениях обмен данными между интерфейсными элементамиприложения и обработчиками запросов несколько иной. Обработчик достаточно часто получаетзапросы и небольшие наборы их параметров, а изменения, которые происходят в интерфейсепосле получения ответа на запрос, обычно тоже невелики. Часто нужно изменить содержаниелишь части показываемой браузером страницы, в то время как остальные ее элементыпредставляют более стабильную информацию, являющуюся элементом дизайна сайта илинабором пунктов его меню. Для отражения этих изменений не обязательно пересылать с серверавесь HTML-документ, что предполагается в рамках традиционного обмена информацией спомощью Web.
Точно так же, если бы корректность вводимых пользователем данных можно былобы проверить на стороне клиента, обработка некорректного ввода происходила бы гораздобыстрее и не требовала бы вообще никакого обмена данными с сервером.Ajax пытается решить эти задачи при помощи комбинации кода на JavaScript, выполняющегосяв браузере, и передаваемых время от времени между клиентом и сервером специальных XMLсообщений, содержащих только существенную информацию о запросе или изменениях HTMLстраницы, которые должны быть показаны. В рамках браузера в отдельном потоке работает ядроAjax, которое получает сообщения JavaScript-кода о выполнении пользователем определенныхдействий, выполняет проверку их корректности, преобразует их в посылку соответствующегозапроса на сервер, преобразует ответ сервера в новую страницу или же выдает уже имеющийся вспециальном кэше ответ. Запросы на сервер и их обработка осуществляются часто асинхронно сдействиями пользователя, позволяя заметно снизить ощущаемое время реакции системы на них.На настоящий момент Ajax еще не является полноценным элементом компонентныхтехнологий.
Используемые в его рамках техники имеют некоторые проблемы, связанные спереносимостью между различными платформами, а также не вполне четко разграничиваютответственность между отдельными подсистемами приложения. Однако, в дальнейшем,аналогичные техники наверняка будут включены в стандартные платформы для разработки Webприложений — J2EE и .NET.Web-службыВ настоящее время совместно с компонентными технологиями на базе J2EE и .NET широкоераспространение получают Web-службы или Web-сервисы (Web services) [18-22], представляющиесобой компонентную технологию другого рода, реализуемую поверх этих платформ.