Lecture14 (Лекции по Технологии программирования. Компонентный подход)
Описание файла
Файл "Lecture14" внутри архива находится в папке "Лекции по Технологии программирования. Компонентный подход". PDF-файл из архива "Лекции по Технологии программирования. Компонентный подход", который расположен в категории "". Всё это находится в предмете "основы программной инженерии" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Технологии программирования. Компонентный подходВ. В. КуляминЛекция 14. Разработка различных уровней Web-приложений в J2EE и.NETАннотацияРассматриваются используемые в рамках Java Enterprise Edition и .NET техники разработкикомпонентов Web-приложений, связывающих приложение с базой данных и представляющихсобой элементы пользовательского интерфейса.Ключевые словаКомпонент EJB, компонент данных, сеансовый компонент, компонент, управляемыйсообщениями, протокол HTTP, сервлет Java, серверная страница Java (JSP), Web-форма .NET.Текст лекцииОбщая архитектура Web-приложенийВ данной лекции мы рассмотрим техники разработки компонентов Web-приложений на основеплатформ J2EE и .NET.
Общая архитектура такого приложения может быть представлена схемой,изображенной на Рис. 74. Обе платформы предоставляют специальную поддержку для разработкикомпонентов на двух уровнях: уровне интерфейса пользователя (WebUI) и уровне связи сданными.Клиент —Web-браузерHTMLстраницыWeb-серверHTTPКомпонентыWebUIКомпонентымоделиданныхХранилищеданных(СУБД)База данныхРисунок 74. Общая схема архитектуры Web-приложений J2EE и .NET.Пользовательский интерфейс Web-приложений основан на генерации динамических страницHTML, содержащих данные, которые запрашивает пользователь. Уровень модели данныхпредоставляет приложению возможность работать с данными, обычно хранящимися в виде наборатаблиц и связей между ними, как с набором связанных объектов.Основные отличия между техниками разработки компонентов этих двух уровней,используемыми в рамках J2EE и .NET, можно сформулировать следующим образом.• В J2EE компоненты EJB предназначены не только для представления данных приложения ввиде объектов, но и для реализации его бизнес-логики, т.е.
объектов предметной области иосновных способов работы с ними.В .NET нет специально выделенного вида компонентов, предназначенного для реализациибизнес-логики — она может реализовываться с помощью обычных классов, что частоудобнее. Это положение должно измениться с выходом EJB 3.0.• EJB компоненты являются согласованным с объектно-ориентированным подходомпредставлением данных приложения.
Работа с ними организуется так же, как с объектамиобычных классов (с точностью до некоторых деталей).В .NET-приложениях все предлагаемые способы представления данных являютсяобъектными обертками вокруг реляционного представления — в любом случае приходитсяработать с данными как с набором таблиц. В .NET нет автоматической поддержки ихпреобразования в систему взаимосвязанных объектов и обратно.Уровень бизнес-логики и модели данных в J2EEВ рамках приложений, построенных по технологии J2EE связь с базой данных и бизнес-логику,скрытую от пользователя, принято реализовывать с помощью компонентов Enterprise JavaBeans.На момент написания этой лекции последней версией технологии EJB является версия 2.1, впервой половине 2006 года должны появиться инструменты для работы с EJB 3.0 (в рамках J2EE5.0).Возможны и другие способы реализации этих функций.
Например, бизнес-логика может бытьреализована непосредственно в методах объектов пользовательского интерфейса, а обменданными с базой данных — через интерфейс JDBC. При этом, однако, теряется возможностьпереиспользования функций бизнес-логики в разных приложениях на основе единой базы данных,а также становится невозможным использование автоматических транзакций при работе сданными. Транзакции в этом случае нужно организовывать с помощью явных обращений к JTA(см.
предыдущую лекцию).Компонент Enterprise JavaBeans (EJB) является компонентом, представляющим в J2EEприложении элемент данных или внутренней, невидимой для пользователя логики приложения.Для компонентов EJB определен жизненный цикл в рамках рабочего процесса приложения —набор состояний, через которые проходит один экземпляр такого компонента. Компоненты EJBработают внутри EJB-контейнера, являющегося для них компонентной средой.
Функции EJBконтейнера следующие.• Управление набором имеющихся EJB-компонентов, например, поддержкой пулакомпонентов для обеспечения большей производительности, а также жизненным цикломкаждого отдельного компонента, в частности, его инициализацией и уничтожением.• Передача вызовов между EJB-компонентами, а также их удаленных вызовов. НесколькоEJB-контейнеров, работающих на разных машинах, обеспечивают взаимодействие наборовкомпонентов, управляемых каждым из них.• Поддержка параллельной обработки запросов.• Поддержка связи между EJB-компонентами и базой данных приложения и синхронизацияих данных.• Поддержка целостности данных приложения с помощью механизма транзакций.• Защита приложения с помощью механизма ролей: передача прав ролей при вызовах междукомпонентами и проверка допустимости обращения в рамках роли к методам компонентов.Для разработки набора компонентов EJB нужно, во-первых, для каждого компонента создатьодин или несколько классов и интерфейсов Java, обеспечивающих реализацию самойфункциональности компонента и определение интерфейсов для удаленных обращений к нему, и,во-вторых, написать дескриптор развертывания — XML-файл, описывающий следующее.• Набор EJB-компонентов приложения.• Совокупность элементов кода на Java, образующих один компонент.• Связь свойств компонента с полями таблиц БД и связями между таблицами.• Набор ролей, правила доступа различных ролей к методам компонентов, правила передачиролей при вызовах одними компонентами других.• Политику компонентов и их методов по отношению к транзакциям.• Набор ресурсов, которыми компоненты могут пользоваться в своей работе.Правила создания EJB компонента зависят от его вида.
Различают три таких вида EJBкомпонентов.•Компоненты данных (сущностные, entity beans).Представляют данные приложения и основные методы работы с ними.• Сеансовые компоненты (session beans).Представляют независимую от пользовательского интерфейса и конкретных типов данныхлогику работы приложения, называемую иногда бизнес-логикой.• Компоненты, управляемые сообщениями (message driven beans).Тоже предназначены тоже для реализации бизнес-логики. Но, если сеансовые компонентыпредоставляют интерфейс для синхронных вызовов, компоненты, управляемыесообщениями, предоставляют асинхронный интерфейс.
Клиент, вызывающий метод всеансовом компоненте, ждет, пока вызванный компонент не завершит свою работу.Компоненту же, управляемому сообщениями, можно отослать сообщение и продолжатьработу сразу после окончания его передачи, не дожидаясь окончания его обработки.Далее описываются основные правила построения EJB компонентов разных видов. Болеедетальное описание этих правил можно найти в [1,2].Компоненты данных и сеансовые компонентыКомпонент данных или сеансовый компонент могут состоять из следующих элементов: параинтерфейсов для работы с самим компонентом — удаленный интерфейс и локальный интерфейс;пара интерфейсов для поиска и создания компонентов — удаленный исходный интерфейс илокальный исходный интерфейс; класс компонента, реализующий методы работы с ним; и, длякомпонентов данных, — класс первичного ключа.
Обязательно должен быть декларирован класскомпонента и один из интерфейсов — удаленный или локальный. Для компонентов данныхобязательно должен быть определен класс первичного ключа.• Удаленный интерфейс (remote interface).Этот интерфейс декларирует методы компонента, к которым можно обращаться удаленно,т.е.
из компонентов, работающих в рамках другого процесса или на другой машине.Удаленный интерфейс должен наследовать интерфейс javax.ejb.EJBObject (в своюочередь, наследующий java.rmi.Remote).Для компонента данных он определяет набор свойств (в смысле JavaBeans, т.е. пар методовType getName()/void setName(Type)), служащих для работы с отдельными полямиданных или компонентами, связанными с этим компонентом по ссылкам. Это могут быть ичасто используемые дополнительные операции, как-то выражающиеся через операции сотдельными полями данных, в том числе и вычислимые свойства. Например, для книги вбазе данных приложения хранится набор ссылок на данные об ее авторах, а число авторовможет быть часто используемым свойством книги, вычисляемым по этому набору ссылок.Для сеансового компонента методы удаленного интерфейса служат для реализациинекоторых операций бизнес-логики или предметной области, вовлекающих несколькокомпонентов данных.• Локальный интерфейс (local interface).По назначению этот интерфейс полностью аналогичен удаленному, но декларирует методыкомпонента, которые можно вызывать только в рамках того же процесса.
Этот интерфейсслужит для увеличения производительности приложений, в которых взаимодействия междукомпонентами происходят в основном в рамках одного процесса. При этом они могутиспользовать локальные интерфейсы друг друга, не привлекая сложный механизмреализации удаленных вызовов методов. Однако, при использовании локального интерфейскомпонента нужно обеспечить развертывание этого компонента в рамках того же EJBконтейнера, что и вызывающий его компонент.Локальный интерфейс должен наследовать интерфейсу javax.ejb.EJBLocalObject.• Удаленный исходный интерфейс (remote home interface).Исходные интерфейсы служат для поиска и создания компонентов. Такой интерфейс может••декларировать метод поиска компонента данных по значению его первичного ключаfindByPrimaryKey(…) и метод создания такого компонента с указанным значениемпервичного ключа create(…).
Могут быть также определены методы, создающиекомпонент по набору его данных или возвращающие коллекцию компонентов, данныекоторых соответствуют аргументам такого метода. Например, метод, создающийкомпонент, который представляет книгу с данным названием, createByTitle(Stringtitle), или метод, находящий все книги с данным набором авторов CollectionfindByAuthors(Collection authors).Удаленный исходный интерфейс предназначен для создания и поиска компонентов извнетого процесса, в котором они работают. Его методы возвращают ссылку на удаленныйинтерфейс компонента или коллекцию таких ссылок.Такой интерфейс должен наследовать интерфейсу javax.ejb.EJBHome (являющемусянаследником java.rmi.Remote).Локальный исходный интерфейс (local home interface).Имеет то же общее назначение, что и удаленный исходный интерфейс, но служит дляработы с компонентами в рамках одного процесса.