Опубликован: 18.03.2010 | Уровень: специалист | Доступ: платный
Лекция 4:

Технология Enterprise Java Beans. Часть 2

Пример "Модернизированный интернет магазин"

Общее описание

Предыдущий пример с интернет магазином обладал рядом недостатков. В этом примере мы постараемся их исправить при помощи использования объектных компонент CMP.

Создание проекта

В этом примере создание компонент EJB будет тесно связано со встроенными функциями Eclipse-WTP,поэтому создадим сразу EJB проект с названием, например, ShoppingBasketObjectBeans.

Подключаем XDoclet к проекту

Рис. 4.9. Подключаем XDoclet к проекту

При создании проекта подключаем XDoclet (Рис. 4.9).

Работа с XDoclet

Для того чтобы сделать работу с объектными компонентами CMP легче, следует использовать средство XDoclet. XDoclet разрабатывался для поддержки атрибутно-ориентированной парадигмы программирования в различных технологиях платформы Java.Суть работы с XDoclet сводится к тому, что в код добавляются так называемые атрибуты. А затем встроенный генератор XDoclet по этим атрибутам создает либо автоматически сгенерированный код, либо различные вспомогательные файлы (xml,разнообразные файлы конфигураций и проч.). Атрибуты в XDoclet имеют точно такой же вид, как и javadoc комментарии. К примеру, XDoclet атрибут, описывающий объектный компонент Commodities выглядит следующим образом:

<!-- begin-xdoclet-definition -->
*	@ejb.bean name="Commodities"
* jndi-name="Commodities"
* type="CMP"
* primkey-field="id"
* schema="CommoditiesSCHEMA"
* cmp-version="2.x" 
*/

Затем XDoclet по этому атрибуту сгенерирует файл ejb.xml, в котором он сразу пропишет все нужные xml-теги,соответствующие описанным в атрибуте параметрам. Это очень удобно иметь сразу перед глазами все параметры компонента EJB,а не заглядывать каждый раз в файл ejb.xml и синхронизировать его с классом компонента.

Полный список возможностей XDoclet доступен на сайте http://xdoclet. sourceforge.net/. Для примера нам понадобится поддержка EJB и JBoss в XDoclet.

Обычно XDoclet устанавливается по умолчанию с Eclipse-WTP.Но если вам попалась урезанная версия Eclipse,или же вы хотите установить другую версию XDoclet,то следует щелкнуть правой кнопкой на EJB -проекте и выбрать раздел Properties.

Выбор пути с библиотеками XDoclet

увеличить изображение
Рис. 4.10. Выбор пути с библиотеками XDoclet

В разделе XDoclet следует выбрать версию XDoclet (на данный моент поддерживаются три -1.2.1, 1.2.2 и 1.2.3) и указать путь к библиотекам XDoclet.Сами библиотеки можно скачать с сайта http://xdoclet.sourceforge.net/.

Помимо указания пути к библиотекам XDoclet,нужно настроить XDoclet соответствующим образом, для того, чтобы он корректно генерировал файлы описаний для JBoss.В разделе XDoclet отключаем пункт "Use global xdoclet preferences". Раскрываем раздел XDoclet слева и там будет два подраздела - EJBDoclet и WEBDoclet.Выбираем подраздел EJBDoclet.

Включаем поддержку JBoss

увеличить изображение
Рис. 4.11. Включаем поддержку JBoss

И теперь включаем поддержку JBoss для нашего проекта (Рис. 4.11).

Создание таблиц в базе данных
Инфологическая модель базы данных

увеличить изображение
Рис. 4.12. Инфологическая модель базы данных

Инфологическая модель базы данных не изменилась по сравнению с предыдущим примером (Рис. 4.12). Только названия таблиц переименованы, чтобы не конфликтовать с названиями таблиц из предыдущего примера. Однако SQL-код,создающий таблицы в базе данных претерпел некоторые изменения -

  • Во-первых, все поля, кроме первичного ключа перестали быть read-only. Это делает работу с объектными компонентами CMP гораздо более гибкой.
  • Во-вторых, теперь больше не нужно создавать пакеты (Package) для хранения только что созданного первичного ключа. Эту работу берет на себя контейнер EJB (в данном случае JBoss).
  • В-третьих, триггеры тоже больше не нужны. Теперь контейнер EJB сам генерирует автоматически первичный ключ по данной последовательности (в случае Oracle,для других баз данных используются другие механизмы).

Поэтому теперь SQL -код выглядит следующим образом

drop table COMMODITY_ORDER_ENTITY;


drop table COMMODITIES_LIST_ENTITY;


drop table ORDERS_ENTITY;
create table COMMODITIES_LIST_ENTITY (
ID integer not null,
NAME varchar(20)   not null,
DESCRIPTION varchar(50)   not null,
PRICE float not null,
IMAGEPATH varchar(30),
primary key(ID)
);
drop sequence COMMODITIES_ENTITY_SEQ;
create sequence COMMODITIES_ENTITY_SEQ 
start with 1 
increment by 1 
nomaxvalue;
create table ORDERS_ENTITY

ID integer not null,
DATE_CREATED DATE not null,
USERNAME varchar(20) not null, primary key(ID)
);
drop sequence ORDERS_ENTITY_SEQ;
create sequence ORDERS_ENTITY_SEQ 
start with 1 
increment by 1 
nomaxvalue;

create table COMMODITY_ORDER_ENTITY
(
ID integer not null, ORDER_ID integer,
COMMODITY_ID integer, 
QUANTITY integer not null, 
primary key(ID)
);

alter table COMMODITY_ORDER_ENTITY
add constraint FK_ORDER_ENTITY 
foreign key (ORDER_ID) 
references ORDERS_ENTITY(ID);
alter table COMMODITY_ORDER_ENTITY
add constraint FK_COMMODITIES_ENTITY
foreign key(COMMODITY_ID)
references COMMODITIES_LIST_ENTITY(ID);
drop sequence COMMODITY_ORDER_ENTITY_SEQ;
create sequence COMMODITY_ORDER_ENTITY_SEQ
start with 1 increment by 1 nomaxvalue;
insert into COMMODITIES_LIST_ENTITY(ID, NAME, DESCRIPTION, PRICE, IMAGEPATH)
values(COMMODITIES_ENTITY_SEQ.nextval,   'Kent 1',   
	'Light cigarettes',   1.99, 'img/kent1.jpg');
insert into COMMODITIES_LIST_ENTITY(ID, NAME, DESCRIPTION, PRICE, IMAGEPATH)
values(COMMODITIES_ENTITY_SEQ.nextval,   'Kent 4',   
	'Light cigarettes',   1.99, 'img/kent4.jpg');
insert into COMMODITIES_LIST_ENTITY(ID, NAME, DESCRIPTION, PRICE, IMAGEPATH)
values(COMMODITIES_ENTITY_SEQ.nextval,   'Kent 8',   
	'Light cigarettes',   1.99, 'img/kent8.jpg');
Антон Зубеков
Антон Зубеков

Здравствуйте, подскажите пожалуйста где можно достать материалы по курсу Кросс-платформенные и многозвенные технологии, о которых говориться, к примеру, в Лекции 2. Пример "Служба мгновенных сообщений"

Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург
Ольга Малых
Ольга Малых
Россия, Казань, Университет управления "ТИСБИ"