1 Практические задания по курсу «Разработка информационных систем на основе J2EE» Здесь приводятся лишь относительно короткие задачи (в т.ч. задачи по базам данных), а основные задачи по J2EE – лабораторные работы – рассматриваются далее. 1.1 Практическая задача 1. Проектирование базы данных Задание состоит в проектировании реляционной базы данных для заданной предметной области. Результат проектирования представляется на диаграмме (в формате CASEсредств ERwin или MS Visio или Rational Rose или, в крайнем случае, на бумаге) в виде схемы БД, включающей таблицы и связи между ними. Таблицы следует называть полными именами (либо все на английском, либо все на транслите). При описании варианта задания (см. ниже) указаны просто ключевые данные, которые подлежат хранению; они не всегда совпадают с сущностями (или, тем более, с таблицами). Возможно, в задании есть дублирования, недостающие элементы и с другие некорректности – так, как если бы задача ставилась неспециалистом в области информационных технологий. Приветствуется использование своих вариантов предметной области (отличных от перечисленных ниже). Дополнительным плюсом считается использование вариантов, в которых имеется наследование сущностей, списковые атрибуты и т.п. осложняющие жизнь ситуации; при этом нужно разумно отобразить эти ситуации в реляционные таблицы. При использовании таких вариантов желательно отдельно от таблиц (реляционная модель) нарисовать сущности (концептуальная модель). После проверки диаграммы куратором, необходимо создать на ее основе DDLскрипт для создания таблиц в БД (рекомендуется сделать это автоматически – с помощью CASE-средства ERwin). Если таблиц в схеме получается больше 5, переносить в DDLскрипт можно не всю схему. Итого за задачу: 7 баллов (4 за качественное проектирование + по 2 балла за представление в CASE-средстве и в виде работающего DDL-скрипта). 1.2 Практическая задача 2. Выборка из базы данных Задание состоит в написании запросов на выборку данных из БД с предварительным заполнением БД осмысленными данными (их количество должно быть достаточным для выполнения запросов). Задание принимается в виде кода SQL-скрипта для Oracle (в крайнем случае – MySQL), инструкции которого перед сдачей должны быть проверены (последовательно исполнены) в каком-либо SQL-клиенте (Oracle SQL Plus, Oracle SQL Work- sheet). Инструкции по наполнению БД показывать куратору не нужно (главное – запросы на выборку). Примерный набор требуемых запросов: 1. Выбор значений заданных атрибутов из нескольких таблиц (соединение) с сортировкой 2. Запрос с использованием внешнего соединения 3. Вычисление групповой функции (с использованием GROUP BY) 4. Запрос с использованием подзапросов или какой-нибудь теоретико- множественной операции (объединение, пересечение, разность) над результатами выборки. 5. Древовидный запрос (Oracle) (2 балла) Итого за задачу: около 6 баллов (как правило, по 1 баллу за каждый запрос, существенно отличающийся от других). 1.3 Варианты предметных областей к задачам 1 и 2 1. Институт (деканаты, кафедры, учебный отдел). * Студенты: паспортные данные, адрес, дата зачисления, номер приказа, факультет, группа, является ли старостой, кафедра (специализация), изучаемые (изученные) предметы, оценки, задолженности, стипендия. * Учебные курсы: название, факультет(ы), групп(ы), кафедра, семестр(ы), форма отчётности, число часов. * Преподаватели: паспортные данные, адрес, телефон, фотография, кафедра, должность, учёная степень, начальник (зав. кафедрой), предмет(ы), число ставок, зарплата. 2. Библиотека института. * Книги: авторы, название, раздел УДК, раздел (техническая, общественнополитическая и т.п.), место и год издания, издательство, количество страниц, иллюстрированность, цена, дата покупки, номер сопроводительного документа (чек, счёт/накладная), вид издания (книги, учебники, брошюры, периодические издания), инвентарный номер (есть только для книг и некоторых учебников), длительность использования читателями (год, две недели, день), электронная версия книги или ее реферата (отсканированный текст). * Читатели: номер читательского билета, ФИО, год рождения, адрес, дата записи, вид (студент, аспирант, преподаватель, сотрудник), курс, номер группы, названия взятых книг и даты их выдачи. 3. Отдел кадров и бухгалтерия некоторой компании. * Сотрудники: ФИО, паспортные данные, фотография, дом. и моб. телефоны, отдел, комната, раб. телефоны (в т.ч. местный), подчинённые сотрудники, должность, тип(ы) работы, задание(я), проект(ы), размер зарплаты, форма зарплаты (почасовая, фиксированная). * Отделы: название, комната, телефон(ы), начальник, размер финансирования, число сотрудников. * Проекты: название, дата начала, дата окончания, размер финансирования, тип финансирования (периодический, разовый), задачи и их исполнители, структура затрат и статьи расходов. 4. Отдел поставок некоторого предприятия: * Поставщики: название компании, ФИО контактного лица, расчётный счёт в банке, телефон, факс, поставляемое оборудование (материалы), даты поставок (по договорам и реальные), метод и стоимость доставки. * Сырьё: тип, марка, минимальный запас на складе, время задержки, цена, продукты, при производстве которых используется, потребляемые объемы (необходимый, реальный, на единицу продукции). 5. Технологический отдел некоторого предприятия: * Производственные процессы: продукты, объёмы их производства, необходимые материалы, количества разных видов материалов на единицу продукции, отходы производства; используемое оборудование и его тип, даты ввода оборудования в строй, сроки амортизации, производительность оборудования; человеческие ресурсы (сколько всего и сколько по производству единицы продукции — сколько необходимо и сколько реально). * Материалы: тип (категория), марка, является ли сырьем (или производится на предприятии), потребляемые объемы (в т.ч. на единицу конечной продукции), в рамках каких технологических процессов используется, цена. 6. Отдел продаж некоторой фирмы. * Клиенты: название компании, ФИО контактного лица, адрес выставления счёта, адрес доставки, телефон, факс. * Заказы: тип заказа (покупка, гарантийный ремонт, негарантийный ремонт), общая стоимость, скидка, товар(ы), их изготовители, модели (марки), серийные номера, описание неисправностей, необходимые ресурсы, клиент, дата получения заказа, срок завершения, дата выставления счёта и его оплаты, метод оплаты, дата поставки, метод и стоимость доставки. * Ресурсы: ФИО, отдел(ы) и телефон(ы) исполнителя(ей), число рабочих часов для выполнения заказа, ставка зарплаты, ответственный за выполнение заказа, необходимое оборудование и расходные материалы, их количество и стоимость, а также наличие материалов на складе. 7. Магазин (внутренний учет). * Клиенты: юридическое или физическое лицо, ФИО, адрес, телефон, адрес выставления счёта, вид и номер карточки, факс. * Продажи: наименования, модели (марки) и серийные номера товаров, поставка из магазина или со склада, количество и общая стоимость товаров, размер скидки, тип скидки, форма оплаты (наличными, оплата счёта, по карточке), необходимость доставки, стоимость и тип доставки, адрес доставки. * Товары: категория, модель, название производителя, адрес производителя, цена, количество в магазине и на складе. 8. Электронный магазин (информация для клиентов). * Товары: категория, модель, производитель, цены (в т.ч. средняя и минимальная), есть ли в наличии, описание, характеристики, внешний вид; магазины, где можно купить товар, их телефоны и адреса; аксессуары, их цены и где их купить. * Магазины: название, компания-владелец, её юридический адрес и home-site, контактные телефоны, адрес, схема проезда, эмблема; товары и цены на них; рекламная информация: некоторые товары с фотографиями, описаниями и ценами, основные отделы (категории товаров). 9. Пункт проката видеозаписей (внутренний учет). * Видеокассеты: идентификационный номер видеокассеты, тип видеокассет, дата его создания, компания-поставщик, число штук данного типа (общее, в магазине, выдано в настоящее время, выдано всего, выдано в среднем за месяц), общая длительность записей; записи видеокассет: название, длительность, категория, год выпуска и производитель (оригинала). * Клиенты: ФИО, паспортные данные, адрес, телефон; заказы, т.е. взятые видеокассеты (сейчас и в прошлом): номер, дата выдачи, дата возвращения, общая стоимость заказа. 10. Пункт проката видеозаписей (информация для клиентов). * Видеокассеты: краткое описание, внешний вид (этикетка), марка (пустой) видеокассеты, цена за единицу прокатного времени (например: 1 день, 3 дня, неделя), есть ли в наличии, общая длительность записей; записи на видеокассете: название, длительность, жанр (категория), тема, год и страна выпуска (оригина- ла), кинокомпания, описание, актеры, режиссер. * Заказы: идентификационные номера и названия выданных видеокассет, дата выдачи, дата возвращения (продления), общая стоимость заказа, возвращены ли кассеты заказа. 11. Кинотеатры (информация для зрителей). * Фильмы: название, описание, жанр (категория), длительность, популярность (рейтинг, число проданных билетов в России и в мире), показывается ли сейчас (сегодня, на текущей неделе), в каких кинотеатрах показывается, цены на билеты (в т.ч. средние). * Кинотеатры: название, адрес, схема проезда, описание, число мест (в разных залах, если их несколько), акустическая система, широкоэкранность, фильмы и цены на них: детские и взрослые билеты в зависимости от сеанса (дневной, вечерний и т.п.) и от категории мест (передние, задние и т.п.); сеансы показа фильмов (дата и время начала). 12. Ресторан (информация для посетителей). * Меню: дневное или вечернее, список блюд по категориям. * Блюда: цена, название, вид кухни, категории (первое, второе и т.п.; мясное, рыбное, салат и т.п.), является ли вегетарианским, компоненты блюда, время приготовления, есть ли в наличии. * Компоненты блюд: тип (гарнир, соус, мясо и т.п.), калорийность, цена, рецепт, время приготовления, есть ли в наличии, ингредиенты (продукты) и их расходы на порцию. 13. Аналитический отдел некоторой компании (поиск и анализ публикаций). * Категории: название, тип (область исследований, область приложений и т.п.), родительская категория, дочерние категории, связанные по смыслу категории (с пояснениями о связях), найденные публикации. * Публикации: название, тип (газетная, книжная, web и т.п.), название, тип, адрес и телефон источника (газета, книга, сайт и т.п.), выходные данные (date-line), язык, реферат, ключевые слова, категории (с указанием степени уверенности отнесения к ним), текст и его тип (обычный, DOC, HTML, отсканированные картинки и т.п.), обзор. * Задачи: тип задачи (классификация или поиск), сотрудник (создавший категорию или нашедший публикацию, ответственный за категорию или публикацию и т.п.), завершена ли работа над задачей. 14. Аналитический отдел некоторой компании (анализ рынка технологий — например, по публикациям — см. №13). * Организация: название, тип (промышленная, финансовая, торговая, исследовательская и т.п.), категория(и), организация-владелец (акционеры), страна, контактная информация; договорные отношения с другими организациями. * Технология (продукт): название, категория(и), организация-разработчик и производитель(и), использующие организации. * Человек: фамилия, имя, тип (начальник, менеджер, создатель технологии и т.п.), организация(и), в которой работает, контактная информация. 15. Компания по (разработке и ) сопровождению программного обеспечения. * Ошибка (bug): краткое и полное описание, срок поступления информации об ошибке, её источник (пользователь, тестировщик) и его координаты, уровень ошибки (критическая, важная, незначительная и т.п.), категория функциональности (интерфейс, данные, расчетный алгоритм, другое, неизвестная категория), часть проекта, модуль (пакет), программист, ответственный за модуль, программист, ответственный за исправление ошибки, срок исправления (необходимый и реальный), исправлена ли, проверено ли исправление тестировщиком. 1.4 Практическая задача 3. Простое Web-приложение 1. Написать сервлет и HTML-файл с формой, по submitу которой (запрос POST) сервлет генерирует приветствие на основе введенных данных (4 балла) 2. Открывать HTML-файл также при обращении по GET к сервлету. (1 балл) 3. Выводить число вызовов сервлета, вызовов текущего экземпляра, число текущих экземпляров, число уничтоженных экземпляров (2 балла) Итого за задачу: 7 баллов 1.5 Практическая задача 4. Простое Web-приложение на базе JSP 1. Переписать HTML-файл с формой (см. задачу 3) в JSP-файл, так что сервлет после POST открывает его не пустым, а с введенными данными. (2 балла) 2. Одно из полей формы сделать списком, наполняемым по данным от сервлета. (2 балла) 3. Выводить error page в случае некорректности введенных данных. (1 балл) 4. Использовать JSTL (или просто usebean) (2-3 балла) Итого за задачу: 7-8 баллов 1.6 Практическая задача 4ю простое EJB-приложение (session bean) 1. Создать stateless session bean с методами getWhole* и getNamesBy*, где * – какой-либо атрибут какой-либо таблицы. (2 балла) 2. Реализовать указанные методы путем запросов к базе данных через JDBC (2 балла). 3. Написать клиент, вызывающий методы бина и показывающий результаты. (JSP-клиент – 5 баллов, консольный клиент – 2 балла, GUI-клиент – 4 балла). Итого за задачу: 6-9 баллов 1.7 Практическая задача 5. Простое EJB-приложение (entity bean) 1. Создать entity bean (BMP), реализующий get и set методы для основных столбцов какойлибо таблицы, а также методы findAll и findBy*. (2 балла) 2. Реализовать указанные методы путем запросов к базе данных через JDBC (3 балла). 3. Вызвать указанные методы из клиента задачи 4 и показать результаты. (JSP-клиент – 3 балла, консольный клиент – 1 балла, GUI-клиент – 2 балла). Итого за задачу: 6-9 баллов 1.8 Практическая задача 6. Запоминание истории изменений (message driven bean) 1. Изменить entity bean задачи 5 так, чтобы при операциях чтения и записи в базу данных (get и set) посылались JMS-сообщения в очередь. (2 балла) 3. Обрабатывать эти сообщения message driven beanом, заполнения таблицу History с информацией о том, какие изменения в какой таблице произошли (3 балла). 3. Показывать содержимое таблицы History в клиенте (построенном на основе клиента задачи 5). (1 балл; см. также баллы за требование 3 в задачах 5 и 6). 4. Дополнить операции set (изменение атрибутов) операциями создания (create) и удаления (delete) бина по отношению ко всем вышеперечисленным пунктам (5 баллов). Итого за задачу: 6-11 баллов 2 Лабораторные работы по курсу «Разработка информационных систем на основе J2EE» В данном разделе приведены не полные описания заданий (не включающие, в частности, ссылки и указания студентам по выполнению задачи). 2.1 Лабораторная работа 1.1. JSP & Servlets Краткое описание задачи Задача состоит в написании на Java и JSP Web-приложения для информационной системы, работающей с базой данных через JDBC. Данные хранятся в базе данных в нескольких таблицах. С помощью Web-приложения осуществляется работа с данными: навигация, создание, модификация и удаление. При написании приложения могут также по желанию использоваться дополнительные технологии (XSLT, JSF и другие). Функции программы 1. Web-приложение должно иметь стартовую страничку, с которой можно осуществлять переходы на другие страницы приложения, такие как страницы навигации, помощи, редактирования объектов и т.д. 2. Навигация по иерархии объектов первой и второй таблицы с отображением необходимых параметров у объектов. 3. Форма редактирования и добавления новых объектов, с возможностью проставления ссылки на объект другой таблицы. 4. Выбор объекта происходит также в отдельном открывающемся окне при нажатии на ссылку. 5. Возможность поиска объекта по одной из таблиц с заданным критерием. 6. Возможность отображения объектов на странице по заданному критерию для каждой из колонок. Технические требования 1. Данные в БД должны быть представлены в двух (или более) таблицах, имеющих иерархическую структуру, т.е. должны существовать объекты, которые являются потомками других объектов. - различная тематика информационной системы. 2. Уникальность объектов определяется их идентификационным номером (ID). 3. При добавлении нового объекта генерация нового ID должна осуществляться автоматически (в случае Oracle это подразумевает использование sequence, а для MySQL создание в таблице колонки с параметром auto_increment). - добавление может осуществляться либо заданием всех параметров сразу, либо в режиме диалога с пользователем (Wizard mode). 4. Работа с БД должна осуществляться в отдельном классе и обращение к нему должно происходить только из специального сервлета. - создание соединения с базой вручную, либо через DataSource 5. Страницы навигации должны быть снабжены всеми необходимыми кнопками для совершения действий над объектами. --- (cutoff for 2 participants) --6. SQL-запросы, с помощью которых получают данные из базы, реализовать с помощью PreparedStatement. 7. Отображение отдельного объекта должно производиться с помощью отдельной JSPстраницы, позволяющей редактировать его параметры. --- (cutoff for 3 participants) --8. Результаты запроса в БД представлять в виде XML. 9. Отображать полный список и список объектов, отобранных по критерию и отсортированных по определенному параметру, с помощью одной и той же JSP-страницы. - различные критерии фильтрации и сортировки 10. После обработки действия (создание или редактирование объекта) также должно производиться перенаправление на страницу навигации. --- (cutoff for 4 participants) --Разделение задачи между участниками проекта 1. Создание структуры БД, заполнение ее данными. 2. Написание JSP для навигации по объектам. 3. Написание JSP для создания и редактирования объектов. 4. Обработка XML, добавление функций фильтрации/сортировки к отображаемым объектам. Итого за задачу: до 45 баллов каждому участнику (если на основе ранее выполненной лабораторной работы №3.3 по курсу Java («Информационная система на базе Swing и JDBC») – до 20 баллов). 2.2 Лабораторная работа 2.1. Entity Beans (BMP) Краткое описание задачи Написать Web-приложение с использованием технологий JSP и EJB (Entity BMP) для примитивной структуры данных, состоящей из 2 (или более, но желательно не более 3-х) сущностей. Данные хранятся в базе данных в 2-4 таблицах. С помощью Web-приложения осуществляется работа с данными: отображение, создание, модификация и удаление. Для отображения объектов используются страницы JSP, которые по полученным параметрам (например, по ID объекта) выводят информацию о данном объекте. При этом на странице должны отображаться ссылки на другие объекты, связанные с текущим. То есть должна быть возможность простой навигации на любой объект, связанный с отображаемым объектом. Функции программы 1. На стартовой странице должна отображаться информация о системе и её возможностях. Она должна содержать ссылки на страницы, на которых можно посмотреть информацию об объектах, хранящихся в базе. 2. В левой части окна (или в виде «выпадающего» меню, написанного на JavaScript) должна отображаться информация о типах сущностей со ссылками на их основные элементы. (Например, в случае древовидной структуры - на корневой элемент). Этот элемент текстовой навигации должен присутствовать на всех страницах. 3. Для каждого объекта должна быть возможность перехода со страницы отображения на страницу редактирования, где изменяются имя, описание или другие поля объекта. Технические требования 1. Создать скрипт для создания таблиц в базе данных. Таблицы должны создаваться с проверкой целостности связей (для этих целей можно использовать FOREIGN KEY CONSTRAINT и/или триггеры) и единственности объектов (для идентификации объекта должен использоваться его «номер» (ID)). 2. Создать на Web-сервере connection pool (делается через консоль weblogic-а или при помощи прямого редактирования файлов конфигурации в других системах (JBoss)). Создать Data Source, связанный с этим connection pool. Для соединения с базой использовать JNDI, при помощи которого получать доступ к Data Source, а уже из него получать соединение с базой. 3. В entity бинах должна быть учтена ситуация, когда объект не модифицируется в ходе работы с бином. В этом случае не нужно перезаписывать записи в базе данных. 4. Все entity бины должны предусматривать возможность поиска не менее чем по двум критериям (как минимум по полям «имя» и «описание»). Для этого должны быть реализованы соответствующие методы в Home-интерфейсах и написана JSP, которая будет позволять пользователю искать объекты. 5. Реализовать несколько «домашних» методов. То есть методов, которые выполняют действия сразу над несколькими объектами данного класса. (Например, переименовывают все объекты, находящиеся в одной группе в соответствии с шаблоном [название группы] – [старое имя объекта]) Разделение задачи между участниками проекта Вначале между участниками оговаривается список страниц, которые будут использоваться для отображения всех объектов. При этом следует решить, какие параметры запроса обрабатываются страницей, и на что они будут влиять. Например, страница viewContact.jsp отвечает за отображение контакта, номер которого передается ей в пара- метре id. После того, как список страниц будет составлен, следует приступать к написанию Entity бинов. Здесь каждому участнику предлагается написать один бин и страницу, которая будет отображать сущности этого класса. Так как все страницы и параметры для отображения других сущностей уже обсуждены, то можно формировать ссылки для перехода на них до того, как они (страницы) будут написаны другими участниками. Итого за задачу: до 25 баллов каждому участнику (на основе ранее выполненной лабораторной работы №1.1). 2.3 Лабораторная работа 3.1. Session Beans Краткое описание Добавить в написанное ранее приложение возможность представления объектов, хранящихся в базе данных в виде XML документов. Реализацию написать с использованием Session Beans. Предполагается, что для запроса также используется XML. Структура файлов должна удовлетворять определенным DTD, которые определяются на основании определенных в системе сущностей и их атрибутов. Функции программы 1. Для преобразования информации об объектах в XML предлагается использовать Stateless Session Beans. 2. Для запроса получения (экспортирования) объектов должен использоваться запрос в виде XML документа, в котором будут записаны критерии выбора сущностей для экспортирования и также необходимость экспортирования тех или иных атрибутов. В качестве критерия для выбора сущностей можно использовать поиск по идентификатору объекта (ID), по имени, по каким-либо связям, определенным для этого типа сущности. 3. Результат экспорта должен быть также представлен в виде XML документа, в котором будут содержаться только запрошенные элементы. 4. Должна быть реализована возможность использовать полученный в результате экспорта XML документ для импорта объекта на другой сервер (или на тот же). --- (cutoff for 2 participants) --5. Для наглядного отображения экспортируемой информации написать страницу, которая будет преобразовывать экспортированный файл из XML в HTML при помощи XLS. 6. Сделать логику экспорта управляемой - то есть в случае, когда импортируемый объект уже имеется объект в хранилище, должны быть предусмотрены следующие действия: «затирание» старых параметров новыми, игнорирование данных из файла импорта и вывод сообщения о том, что такой объект уже есть в базе данных. --- (cutoff for 3 participants) --- 7. Реализовать возможность автоматического поиска объектов для экспорта, которые связаны с экспортируемой сущностью. (Например, если экспортируется Игрок, то вместе с ним должна экспортироваться Команда, которой этот игрок принадлежит) --- (cutoff for 4 participants) --Технические требования 1. Создать 2 DTD файла, описывающие форматы XML документов для импорта и экспорта. Написать Stateless Session Bean, который будет реализовывать процедуру импорта и экспорта сущностей. При импорте должна выполняться проверка на соответствие входных данных файлам описания (DTD). 2. В методе импорта необходимо для каждого объекта выполнять проверку на наличие его в хранилище, чтобы не вызывать нарушения целостности путем попытки создания второго объекта с таким же первичным ключом. Если объект уже существует, то в зависимости от значения входных параметров выполняем обновление параметров объекта , выводим сообщение или другие действия. 3. Для экспортирования группы объектов должен быть написан метод, который обрабатывает коллекцию сущностей и генерирует XML документ экспорта, содержащий всю запрошенную информацию об этих объектах. Для этого можно передавать в качестве параметра вызова коллекцию первичных ключей объектов для экспорта, либо же реализовать механизм, когда Session Bean дергает методы findBy*() соответствующего Home интерфейса entity бина. 4. При программировании возможности автоматического поиска объектов для экспорта, которые связаны с экспортируемой сущностью, сам механизм поиска следует делать универсальным – связи для поиска должны задаваться в отдельном конфигурационном файле. Это необходимо для повышения гибкости программы. Разделение задачи между участниками проекта Сначала участниками проекта определяется структура XML документов экспорта/импорта и запросов. После чего задача разбивается на следующие параллели: 1. Участник 1: пишет составляющую метода экспорта, связанную с экспортированием только выбранных сущностей. Пишет страницу, которая управляет экспортом и импортом (если участников 2 – только страницу экспорта). Для переходя на эту страницу предлагается разместить соответствующие кнопки в текстовой навигации (рядом с кнопками «создать», «удалить», «редактировать» и т.п.) 2. Участник 2: пишет часть кода, отвечающую за импортирование объектов. a. В случае 2-х участников: пишет страницу, управляющую импортом. b. В случае большего количества участников: реализует поддержку корректной обработки ситуаций, когда объект уже есть в хранилище. 3. Участник 3: пишет страницу, которая позволяет просмотреть объекты, которые будут импортированы или экспортированы, в виде таблицы. Пользователь должен иметь возможность включать и выключать отображение дополнительных параметров. 4. Участник 4: реализует возможность автоматического поиска объектов для экспорта, которые связаны с экспортируемой сущностью. Итого за задачу: до 25 баллов каждому участнику (на основе ранее выполненной лабораторной работы №2.1). 2.4 Лабораторная работа 4.1. JMS & MDB Краткое описание К существующему J2EE приложению добавить возможность вести историю создания и модификации бинов. Обо всех изменениях бинов должна оповещаться служба JMS через заранее созданный топик. Модуль, отвечающий за обработку сообщений в JMS и сохранение их в определенном формате, представлен одним или несколькими бинами MDB. Логика этих бинов должна зависеть только от формата сообщений, посылаемых обычными Entity бинами и не должна зависеть от самих бинов. Формат сообщения оговаривается заранее и не меняется в дальнейшем. Функции программы 1. Посылка сообщений в топик JMS происходит при создании или изменении бина. При этом JMS ресурсы должны создаваться только при создании бина и освобождаться при его удалении. 2. Один или несколько MDB, подписанных на топик, отслеживают приходящие сообщения и обрабатывают их определенным образом. 3. Для каждого объекта должна существовать возможность просмотреть историю его изменения на отдельной странице в пользовательском интерфейсе. Технические требования 1. Создать на Web-сервере топик (или очередь) сообщений. - создавать топик или очередь сообщений 2. Модифицировать существующие entity бины таким образом, чтобы при их создании или изменении происходила отправка сообщения об изменениях в топик JMS. 3. Создать MDB, который подписывается на сообщения из топика JMS. Информация об изменениях, полученная из сообщения, сохраняется в базу (в специальную таблицу) с помощью дополнительного Session бина. - различная представление таблицы истории. 4. Этот же Session bean должен уметь выдавать историю изменения для одного объекта (для продвинутых в виде XML). - история в виде XML (или в другом формате) 5. В истории должна обязательно содержаться дата изменения или создания объекта. --- (cutoff for 2 participants) --6. Сообщения о разных событиях должны обладать разным приоритетом, т.е. сообщения о создании объекта должны иметь самый высокий приоритет, сообщения о модификации объекта – средний приоритет, и информационное сообщение – самый низкий. 7. Каждая отправка сообщения должна быть подтверждена со стороны службы JMS об успешной доставке. --- (cutoff for 3 participants) --8. Модифицировать созданную систему ведения истории следующим образом: установить службу JMS вместе с MDB бинами на отдельном web сервере. Все сообщения от Entity бинов будут посылаться на удаленную службу JMS. --- (cutoff for 4 participants) --Разделение задачи между участниками проекта На начальном этапе совместно обсуждается и утверждается формат передаваемого сообщения. Затем в пропорции 50/50 участники проекта делают бины MDB, а другие модифицируют уже имеющиеся Entity бины. Итого за задачу: до 20 баллов каждому участнику (на основе ранее выполненной лабораторной работы №2.1).