Оптимизация разработки приложений. Часть 2: Разработка решений с помощью Rational Application Developer

Натаниэль Шута (Nathaniel T. Schutta)

Оглавление

Раздел 1. Перед началом работы

Об этом руководстве

Это вторая из пяти частей общего руководства. Мы настоятельно рекомендуем проводить ознакомление со всеми частями последовательно, так как каждое руководство основывается на результатах предыдущего раздела.

В данном руководстве рассматривается процесс составления диаграммы класса, сопровождаемый написанием соответствующего кода компонентов Enterprise JavaBean (EJB). Несмотря на то, что этот материал не охватывает создание полностью завершенного приложения, в результате изучения вы получите два основных протестированных бизнес-компонента, обладающих должной функциональностью. В этом руководстве рассматривается приложение Auction, широко используемое в семействе программных продуктов IBM в качестве учебного материала. В этом Web-приложении технология Java 2 Platform Enterprise Edition (J2EE) применяется для создания системы ведения аукциона, по функциональности схожей с порталами eBay, Yahoo, Amazon и другими подобными системами. Схема работы очевидна: пользователи выставляют определенные позиции на аукцион, в то время как остальные пользователи предлагают за них свою цену.

По мере изучения руководства вы познакомитесь с самой последней версией инструмента, существенно облегчающего процесс разработки - IBM Rational Application Developer (ранее известный как IBM WebSphere Studio Application Developer), входящего в состав платформы IBM Software Development Platform. Этот новый продукт помогает унифицировать все стадии разработки на базе проекта Eclipse (от создания концепции до непосредственного развертывания). Он является лишь частью полноценного решения по разработке ПО, доступного в рамках платформы IBM Software Development Platform.

Данное руководство охватывает следующие темы::

  • Начало работы: Изучение начинается с определения рабочего пространства проекта, следующего после материалов, рассмотренных в конце первой части руководства. На этом этапе идет подготовка к основной части руководства;
  • Создание диаграммы класса UML: Далее потребуется визуальное создание классов, обеспечиваемое более новыми усовершенствованными функциями моделирования Unified Modeling Language (UML) пакета программ Rational Suite;
  • Добавление бизнес-методов: Небольшое изменение сгенерированного кода EJB в процессе добавления дополнительных бизнес-методов. Вам потребуется ввести часть кода вручную, а также узнать преимущества применения комментариев (annotations);
  • Развертывание и тестирование компонентов: Завершив основную разработку EJB, разверните и запустите эти компоненты в среде WebSphere для тестирования с помощью универсального клиента тестирования IBM Universal Test Client.

Закончив написание программного кода, перейдите к его тестированию. В части 3 данного руководства обсуждается выявление дефектов с помощью IBM Rational ClearQuest, а также отслеживание дефектов и других запросов на изменение непосредственно в IBM Rational RequisitePro.

Для изучения данного руководства необходимо ознакомиться с языком Java и основными концепциями J2EE. Опыт работы с технологиями UML и EJB может помочь в изучении материала, но не является обязательным условием.

Предварительные условия

Для выполнения операций данного руководства вам потребуется Rational Application Developer (версия 6.0). Загрузите ознакомительную версию. Для загрузки доступны версии, предназначенные для установки в ОС Microsoft Windows 2000, Windows Server 2003 и Windows XP, а также версии для ОС Linux на базе x86.

Раздел 2.Начало работы

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

Этот раздел посвящен созданию рабочих пространств, которые необходимы для размещения программного кода. При создании EJB вам понадобится создать соответствующий проект EJB. Rational Application Developer автоматически создает проекты, требуемые для EJB . Обратите внимание на то, что для проектов EJB нужно обязательно определить целевой сервер. Если в процессе установки Rational Application Developer вы не установили среду IBM WebSphere Application Server 6.0 Integrated Test Environment, сделайте это сейчас. Чтобы создать проект EJB:

  1. Выберите в меню: File > New > EJB Project. Так как структура меню зависит от контекста, вполне возможно, что пункт EJB Project не будет отображаться при выборе пути File > New. Если пункт меню EJB Project отсутствует, выберите File > Other > EJB Project;
  2. На экране появится мастер New EJB Project. Введите имя проекта. Для данного примера следует указать RAD tutorial;
  3. Оставьте месторасположение проекта без изменений;
  4. При необходимости разработать другую версию EJB или разместить ее на другом целевом сервере, нажмите Show Advanced и внесите соответствующие изменения;
  5. Нажмите Finish;
  6. В случае появления запроса о переключении на другую перспективу нажмите Yes.

На этом этапе Rational Application Developer создает проект EJB и несколько вспомогательных проектов, как показано на рисунке 1. Речь идет о трех следующих проектах:

  • RAD tutorialEAR - проект Enterprise Archive (EAR) в папке Enterprise Applications
  • RAD tutorial - проект EJB в папке EJB Projects
  • RAD tutorialClient - проект клиента в папке Other Projects

Рис. 1. Новые проекты
Новые проекты

Создание диаграммы класса UML

Теперь, когда проект определен, вы можете создать диаграмму класса, используемую для генерирования EJB. Начните с создания папки для диаграммы класса. Находясь в Project Explorer:

  • Выберите проект EJB RAD tutorial;
  • Нажмите правой кнопкой мыши RAD tutorial, а затем выберите New > Other;
  • Перейдите ниже по списку и разверните узел Simple;
  • Выберите Folder, а затем нажмите Next;
  • Убедитесь в том, что RAD tutorial является родительской папкой;
  • В качестве имени папки введите diagrams;
  • Нажмите Finish.

Чтобы создать диаграмму класса UML:

  • Выберите проект EJB RAD tutorial;
  • Нажмите правой кнопкой мыши RAD tutorial, а затем выберите New > Class Diagram;
  • Разверните узел RAD tutorial;
  • Выберите папку diagrams;
  • Измените имя диаграммы на EJB diagram;
  • Нажмите Finish.

На экране появится пустая диаграмма класса и визуальный редактор UML (как показано на рисунке 2). Палитра на правой стороне окна состоит из нескольких вкладок, содержащих различные элементы, которые могут быть созданы и отредактированы в рамках диаграммы класса. Открыть и закрыть вкладки можно одним щелчком мыши. В этой версии Rational Application Developer палитра стала составной (с возможностью наращивания). Обратите внимание на то, что вкладка EJB открыта. Так как данная диаграмма была создана внутри проекта EJB, соответствующая вкладка EJB добавляется в палитру.

Рис. 2. Визуальный редактор UML
Визуальный редактор UML

Раздел 3. Построение диаграммы класса UML

Добавление объектов в диаграмму класса UML

После того как будет закончена вся подготовительная работа, можно перейти к непосредственному созданию компонентов EJB. Создайте четыре следующих компонента: Buyer, Seller, Bid и Item . Чтобы создать компонент Buyer:

  • С помощью щелчка мыши откройте вкладку EJB, размещенную на палитре в ракурсе Diagram;
  • Нажмите CMP 2.x Entity Bean (находится в середине вкладки EJB);
  • Переместите курсор мыши на диаграмму класса и нажмите, чтобы установить компонент . При этом будет запущен мастер создания компонентов Create an Enterprise Bean;
  • Убедитесь в том, что в качестве проекта EJB выбран RAD tutorial;
  • Введите buyer в качестве имени Bean
    1. По правилам, классы Java начинаются с прописных букв. Поэтому мастер предупреждает вас о наличии ошибки;
    2. Исправьте имя, при этом с экрана будет убрано предупреждение.
  • Убедитесь в том, что в качестве папки Source указано ejbModule;
  • Для параметра Default Package введите значение tutorial;
  • Убедитесь в том, что для CMP Version установлено значение 2.x;
  • Установите флажок Generate an annotated bean class;
  • На данном этапе мастер должен выглядеть так, как показано на рисунке 3. Нажмите Next, чтобы продолжить работу.

Рис. 3. Информация в окне "Create a new Entity bean"
Информация в окне Create a new Entity bean

Примечание: Давайте разберемся, что такое комментарии. Если вы уже работали с технологией EJB, то знаете, как много компонентов приходится синхронизировать, так как используемые интерфейсы должны в высокой степени точности соответствовать фактическому классу компонентов. На этом этапе очень легко сделать ошибку. Несмотря на то, что большинство интегрированных сред разработки (IDE) предполагает использование таких компонентов и обеспечивает их синхронизацию, пользователь не всегда имеет под рукой знакомый инструмент разработки. Так как множество правил и взаимоотношений по своей природе - механические, генератор кода может создать для вас большую часть артефактов, связанных с компонентами EJB. Тем не менее, для этого потребуется определенный объем метаданных, и как раз эту проблему можно решить с помощью комментариев (annotations). Основная цель разработки на базе комментариев - ограничить количество артефактов, за которые отвечают разработчики, тем самым упрощая процесс разработки. В качестве новой функциональной возможности в Rational Application Developer версии 6.0 пользователям предлагается поддержка комментариев, облегчающая выполняемую работу. За более подробной информацией обратитесь к справочным файлам, ознакомьтесь с работой механизма генерирования кода XDoclet, а также проектом объектно-реляционного отображения данных Hibernate (с открытыми исходными текстами) и ранней черновой версией спецификации EJB 3.0.

Добавление подробной информации в компонент

На следующей странице мастера необходимо добавить в компонент подробные сведения. Компонент Buyer имеет три поля: имя, адрес и рейтинг. Чтобы добавить подробную информацию:

  1. Оставьте пустым текстовое поле "Bean supertype";
  2. Убедитесь в том, что для класса Bean выбрано значение tutorial.BuyerBean;
  3. Не устанавливайте флажок "Remote client view";
  4. Убедитесь в том, что флажок "Local client view" установлен;
  5. Убедитесь в том, что для "Local home interface" указано значение tutorial.BuyerLocalHome;
  6. Убедитесь в том, что для "Local interface" указано значение tutorial.BuyerLocal;
  7. Убедитесь в том, что для параметра "Key class" установлено значение java.lang.Integer, а также установлен флажок "Use the single key attribute type for the key class";
  8. Чтобы добавить атрибуты CMP для данного компонента:
    1. Нажмите Add;
    2. Введите name в поле Name и java.lang.String в поле Type. Поля Array и Key должны оставаться незаполненными. Установите флажок Promote getter and setter methods to local interface;
    3. Нажмите Apply;
    4. Повторите процедуру для остальных атрибутов: address: java.lang.String и rating: int;
    5. Завершив добавление атрибутов, нажмите Close.
  9. На данном этапе окно программы должно выглядеть так, как показано на рисунке 4. Нажмите Finish на странице Create an Enterprise Bean.

Рис. 4. Настройки для создания EJB
Настройки для создания EJB

Обратите внимание на то, что объект в диаграмме класса имеет методы, определенные интерфейсами. Это новая функциональная особенность Rational Application Developer. Повторите данную процедуру для остальных трех компонентов, добавляя каждый из них в модель класса в качестве компонентов CMP 2.x. Для компонента Seller:

  • Имя: java.lang.String
  • Адрес: java.lang.String
  • Рейтинг: int

Для компонента Bid:

  • Сумма: int
  • Метка времени: java.sql.Timestamp

Для компонента Item:

  • Резервированная цена: int
  • Название: java.lang.String
  • Тип: java.lang.String

По окончании процедуры сохраните диаграмму. На данном этапе диаграмма класса должна выглядеть так, как показано на рисунке 5.

Рис. 5. Завершенная диаграмма класса
Завершенная диаграмма класса

Добавление управляемых взаимоотношений в диаграмму класса UML

После того как объекты определены, настало время добавить между компонентами соответствующие связи. Определенный покупатель (Buyer) может представить несколько ценовых заявок (Bid), а продавец (Seller) может реализовывать сразу несколько позиций (Item). Заявки и позиции также взаимосвязаны. Первым делом необходимо определить взаимосвязь между покупателем (Buyer) и его заявками (Bid), а также между продавцом (Seller) и его позициями (Item). Чтобы добавить сопоставление:

  1. При необходимости с помощью щелчка мыши откройте вкладку EJB, размещенную на палитре в ракурсе Diagram;
  2. В ракурсе Palette нажмите стрелку вниз на вкладке "CMP Relationship", чтобы отобразить дополнительные типы взаимоотношений;
  3. Выберите 0..1:0..* Directed CMP Relationship;
  4. Переместите курсор мыши на компонент Buyer. Если взаимосвязь существует, появится пиктограмма с изображением стрелки ( ). Если взаимосвязи нет, на экране отобразится пиктограмма стрелки, к которой присоединен общепринятый знак "нет" ( );
  5. Нажмите компонент Buyer, перетащите курсор на компонент Bid, а затем отпустите кнопку мыши;
  6. Дважды нажмите метку bid на связи и переименуйте связь в bids. Это приведет к формированию более понятного метода getBids()для данного компонента;
  7. Нажмите клавишу Enter, а затем сохраните диаграмму.

Повторите указанные операции для установки схожих связей типа "один-множество" между продавцом и его позициями (не забудьте менять метку позиции на items). Таким же образом добавьте взаимосвязь между компонентами Item и Bid, используя регулярное отношение 0..1:0..* CMP Relationship, а затем переименуйте метку bid в bids. На данном этапе диаграмма класса должна выглядеть так, как показано на рисунке 6.

Рис. 6. Диаграмма класса с установленными взаимосвязями

Раздел 4. Добавление бизнес-методов

На данном этапе у вас уже имеются смоделированные атрибуты, связанные с EJB, но для двух компонентов все еще необходимо создать дополнительные бизнес-методы. Для этого перейдите непосредственно к коду компонентов и добавьте требуемые методы. Начните с добавления методов isHighest() и isSuccessful()в компонент Bid. Будучи примененным, каждый из них выдает булево значение (Boolean).

  1. В Project Explorer, в разделе EJB Projects, разверните узел RAD tutorial;
  2. Разверните узел ejbModule;
  3. Разверните узел ejbModule;
  4. Нажмите дважды BidBean, чтобы открыть BidBean в редакторе Java;
  5. Пролистайте код до конца и введите новый код для методов. Код должен выглядеть следующим образом:
    public boolean isHighest() { 
    	return false; 
    }
    public boolean isSuccessful() { 
    	return false;
    }
    			

  6. Сохраните внесенные изменения.

Созданные бизнес-методы следует сделать доступными для клиентов путем распространения этих методов на локальном интерфейсе. Так как данный класс был создан с помощью комментариев, вам просто необходимо вставить перед методами следующий программный код:

/**
* @ejb.interface-method 
*/			

С помощью этого тега методы становятся видимыми на локальном интерфейсе. Также выполните указанную процедуру для метода isSuccessful(). На диаграмме класса ваши методы отображаются в разделе BidLocal в рамках класса BidBean (см. рисунок 7).

Рис. 7. Класс BidBean с бизнес-методами
Класс BidBean с бизнес-методами

Теперь необходимо добавить бизнес-методы для класса ItemBean. Данному классу требуются методы для отображения текущей, максимальной и начальной ценовой заявки. В поисках необходимой позиции эти три метода будут проводить итерацию в группе заявок, созданной вами при сопоставлении CMR между компонентами Item и Bid. Откройте ItemBean в редакторе программного кода и добавьте следующий код:

public BidLocal getStartingBid() {
   BidLocal startingBid = null;
   java.util.Collection c = getBids();
   java.util.Iterator it = c.iterator();
   while (it.hasNext()) {
       BidLocal thisBid = (BidLocal) it.next();
       java.sql.Timestamp thisBidTimestamp = thisBid.getTimestamp();
       if (startingBid == null) {
           startingBid = thisBid;
        }
    java.sql.Timestamp startingBidTimestamp = startingBid.getTimestamp();
    if (thisBidTimestamp.before(startingBidTimestamp)) {
        startingBid = thisBid;
    }
   }
   return startingBid;
}
			

Не являясь самым эффективным программным кодом в мире, команды на языке Java все же просты для понимания (они понадобятся позже в этом руководстве - при работе с IBM Rational PurifyPlus). Если в процессе обработки группы заявок (Bids) будет выявлено, что рассматриваемая заявка имеет более раннюю метку времени, чем предыдущая заявка, то она помечается как начальная заявка (starting bid). В качестве результата метод отображает самую раннюю заявку. В нижеследующем коде представлены сведения о внедрении методов getCurrentBid() и getMaximumBid(), которые схожи с методом getStartingBid():

public BidLocal getCurrentBid() {
   BidLocal currentBid = null;
   java.util.Collection c = getBids();
   java.util.Iterator it = c.iterator();
   while (it.hasNext()) {
       BidLocal thisBid = (BidLocal) it.next();
       java.sql.Timestamp thisBidTimestamp = thisBid.getTimestamp();
       if (currentBid == null) {
           currentBid = thisBid;
       }
       java.sql.Timestamp startingBidTimestamp = currentBid.getTimestamp();
       if (thisBidTimestamp.after(startingBidTimestamp)) {
           currentBid = thisBid;
       }
    }
   return currentBid;
}
public BidLocal getMaximumBid() {
   BidLocal maximumBid = null;
   java.util.Collection c = getBids();
   java.util.Iterator it = c.iterator();
   while (it.hasNext()) {
        BidLocal thisBid = (BidLocal) it.next(); 
        int thisBidAmount = thisBid.getAmount();
        if (maximumBid == null) {
            maximumBid = thisBid;
          }
        int maximumBidAmount = maximumBid.getAmount();
        if (thisBidAmount > maximumBidAmount) {
            maximumBid = thisBid;
          }
      }
   return maximumBid;
   }
				}	

В завершении необходимо добавить код, с помощью которого заявки добавляются в группу заявок:

public void attachBid(BidLocal theBid) {
   //Get hold of the collection of bids, and throw the latest bid into it. 
   getBids().add(theBid); 
				}	

По окончании разверните эти новые методы на локальном интерфейсе так же, как это было сделано для BidBean: путем добавления соответствующего комментария. Убедитесь в том, что все четыре метода отображаются в диаграмме класса в разделе ItemLocal.

Другой способ создания компонента

До этого момента при создании компонентов вы использовали возможности моделирования UML, присущие решению Rational Application Developer. Однако это не единственный способ решения задачи. Вы всегда можете создать компоненты непосредственно в самом проекте. Теперь, при наличии ключевых объектов, вам необходимо добавить генератор первичных ключей, чтобы в дальнейшем создавать собственные компоненты. Чтобы создать компонент:

  1. В Project Explorer, в разделе EJB Projects, разверните узел RAD tutorial;
  2. Нажмите правой кнопкой мыши Deployment Descriptor: RAD tutorial, а затем выберите New > Enterprise Bean;
  3. Выберите Entity bean with container-managed persistence (CMP) fields;
  4. Введите UniqueKeyGenerator в качестве имени Bean;
  5. Убедитесь в том, что в качестве проекта EJB выбран RAD tutorial;
  6. Убедитесь в том, что в качестве папки Source указано ejbModule;
  7. Для параметра Default Package введите значение tutorial;
  8. Убедитесь в том, что для CMP Version установлено значение 2.x;
  9. Установите флажок Generate an annotated bean class, а затем нажмите Next;
  10. Измените используемый по умолчанию ключ:
    1. Выберите id : java.lang.Integer в окне атрибутов CMP;
    2. Нажмите Edit;
    3. Измените тип (Type) на java.lang.Integer, а затем нажмите OK;
  11. Чтобы добавить атрибуты CMP для данного компонента:
    1. Нажмите Add;
    2. Введите lastNumberUsed в поле Name и java.lang.Integer в поле Type. Поля Array и Key должны оставаться незаполненными. Кроме того, не устанавливайте флажок Promote getter and setter methods to local interface;
    3. Нажмите Apply, а затем нажмите Close.
  12. Нажмите Finish. Страница "Create an Enterprise Bean" должна выглядеть так, как показано на рисунке 8.

Рис. 8. Информация для создания компонента (enterprise bean)
Информация для создания компонента (enterprise bean)

В этом процессе создается новая диаграмма класса (под названием default , которое можно сменить), отображающая компонент UniqueKeyGenerator. Сохраните диаграмму. Вместо того чтобы предоставить прямой доступ к параметру lastUsedNumber, добавьте бизнес-метод, который осуществляет приращение и в качестве результата отображает lastUsedNumber. В данном примере эта задача будет решаться не самым эффективным образом, но сам процесс продемонстрирует определенные преимущества Rational Application Developer. Чтобы добавить бизнес-метод:

  1. В Project Explorer, в разделе EJB Projects разверните узел RAD tutorial;
  2. Разверните узел ejbModule;
  3. Разверните узел tutorial;
  4. Выберите UniqueKeyGenerator.java;
  5. Перетащите компонент в новую диаграмму класса;
  6. Нажмите правой кнопкой мыши класс Java, затем выберите Add > Java Method, чтобы запустить мастер создания Create Java Method;
  7. В качестве имени укажите getUniqueKey;
  8. Измените тип (Type) на java.lang.Integer;
  9. Оставьте предлагаемые по умолчанию настройки без изменения, а затем нажмите Finish;
  10. Сохраните диаграмму.

Обратите внимание на ошибку в своем коде, вызванную отсутствием какого-либо содержания для нового метода в компоненте UniqueKeyGenerator. Дважды нажмите иконку компонента UniqueKeyGenerator в Project Explorer, а затем перейдите вниз по списку к новому методу. Добавьте нижеследующий код:

/**
  * @ejb.interface-method
  */
public java.lang.Integer getUniqueKey() {
   int intVal = getLastNumberUsed().intValue();
   intVal++;
   Integer inc = new Integer(intVal);
   setLastNumberUsed(inc);
   return inc;
}
			

При сохранении класса символ ошибки должен исчезнуть. Не забудьте вставить комментарий, делающий этот метод доступным на локальном интерфейсе!

Находясь в компоненте UniqueKeyGenerator, измените метод create так, чтобы он устанавливал стартовый последний номер для использования в других компонентах. Это не идеальный программный код, но на данном этапе он вполне подойдет:

/**
  * ejbCreate
  * @ejb.create-method
  * view-type="local"
  */
public java.lang.String ejbCreate(java.lang.String id)
   throws javax.ejb.CreateException {
   setId(id);
   setLastNumberUsed(new Integer(0));
   return null;
}
			

По окончании процедуры сохраните класс.

Код для создания компонентов ItemBean и BidBean

Теперь пришло время воспользоваться возможностями генератора уникальных ключей. В этом разделе вам предстоит отредактировать методы ejbCreate() в компонентах ItemBean и BidBean, чтобы выполнить минимальный объем работ, необходимый для создания компонента путем предоставления первичного ключа.

Отредактируйте метод ejbCreate() компонентов BidBean и ItemBean согласно нижеследующему программному коду. Обратите внимание на то, что вы удаляете аргумент, который Rational Application Developer добавляет данному методу по умолчанию, и при этом добавляете комментарий, указывающий на то, что это метод create:

/**
  * @ejb.create-method
  */
public java.lang.Integer ejbCreate()
   throws javax.ejb.CreateException {
   Integer id = null;
   try {
     javax.naming.InitialContext ctx = new javax.naming.InitialContext();
     UniqueKeyGeneratorLocalHome ukgHome = (UniqueKeyGeneratorLocalHome)
     ctx.lookup("local:ejb/ejb/tutorial/UniqueKeyGeneratorLocalHome");
     UniqueKeyGeneratorLocal ukg = ukgHome.findByPrimaryKey("KEY");
     id = ukg.getUniqueKey();
   } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException();
   }
   setId(id);
   return id;
}
			

Конечно, данный код предполагает, что UniqueKeyGenerator уже существует с идентификатором (id) KEY, но об этом пойдет речь позже на этапе тестирования. Система выдаст ошибку, указывающую на необходимость существования ejbPostCreate(). Пролистайте список вниз и удалите используемый по умолчанию параметр Integer в методе ejbPostCreate(), а затем сохраните компонент.

Раздел 5. Развертывание и тестирование компонентов

Сопоставление компонентов CMP с реляционной базой данных

Несомненно, что для использования созданных компонентов CMP необходимо сопоставить их с реляционной базой данных. Для этого необходимо создать файлы определения базы данных для таблиц, которые представляют ваши компоненты. Представленная ниже процедура показывает, как сопоставить компоненты с открытой базой данных Cloudscape (сопоставление возможно практически с любой реляционной базой данных).

Так как компоненты уже были определены, можно использовать сопоставление нисходящего типа (top-down mapping). Вы можете генерировать компоненты на основе существующих таблиц (сопоставление восходящего типа), а также сопоставлять существующие компоненты с существующими таблицами (сопоставление типа meet-in-the-middle mapping). Чтобы создать файлы сопоставления с Cloudscape:

Например, Rational Software Modeler (а также Rational Application Developer) использует присущие платформе Eclipse функции перспектив для обеспечения интеграции с другими компонентами и инструментальными средствами в пакете Rational Suite. В этом руководстве основное внимание уделяется интеграции с Rational RequisitePro и в этой связи пользователю предоставляется перспектива Requirements.

  1. Выделите BuyerBean на диаграмме класса;
  2. Нажмите правой кнопкой мыши компонент, а затем выберите EJB to RDB Mapping > Generate Map, чтобы запустить мастера сопоставления EJB-to-RDB Mapping (см. рисунок 9);

    Рис. 9.Сопоставление EJB-to-RDB
    Сопоставление EJB-to-RDB

  3. Выберите параметр "Use an existing backend folder";
  4. Убедитесь в том, что выделено значение CLOUDSCAPE_V5_1;
  5. Выберите параметр "Create and map unmapped elements";
  6. Нажмите Finish. Файл сопоставления будет создан, при этом таблица Buyer будет отображаться в диаграмме класса;
  7. Сохраните диаграмму.

Компонент Buyer в диаграмме класса должен выглядеть так, как показано на рисунке 10.

Рис. 10.Диаграмма класса с отображением таблицы
Диаграмма класса с отображением таблицы

Сопоставьте остальные компоненты, продолжая использовать существующую базовую папку (backend folder), которая использовалась при сопоставлении BuyerBean. Обратите внимание на то, что в рамках окна редактора вы не можете видеть всю диаграмму класса целиком (такое случается при работе с большинством нестандартных диаграмм класса). Специально для просмотра больших диаграмм Rational Application Developer снабжен режимом Outline (Набросок), который можно использовать для перемещения по разным областям диаграммы внутри окна редактора диаграмм (см. рисунок 11). Выделенный прямоугольник обозначает область, которая в данный момент просматривается в окне редактора.

Рис. 11.Режим просмотра Outline в Rational Application Developer
Режим просмотра Outline в Rational Application Developer

Развертывание и тестирование компонентов

На этом этапе завершается процесс написания кода и начинается тестирование компонентов! Прежде всего, вам необходимо сгенерировать весь служебный код, требуемый для функционирования EJB. В Rational Application Developer этот процесс не требует особых усилий. Чтобы сгенерировать требуемый программный код, в Project Explorer нажмите правой кнопкой мыши RAD tutorial, а затем выберите команду Deploy.

Наберитесь терпения - этот процесс может занять много времени. После его окончания разверните узел ejbModule, а затем узел tutorial, чтобы убедиться в появлении нескольких новых классов. После того как будет сгенерирован код, необходимо запустить компоненты на сервере тестирования:

  1. В Project Explorer view нажмите правой кнопкой мыши RAD tutorial и выберите Run > Run on Server;
  2. Выберите параметр "Choose an existing server";
  3. Убедитесь в том, что в качестве необходимого сервера указан WebSphere Application Server V6.0, а затем нажмите Next;
  4. Убедитесь в том, что RAD tutorialEAR находится в окне Configured Projects, а затем нажмите Next;
  5. Выберите параметр Create tables with data sources;
  6. Нажмите Finish.

И вновь этот процесс может занять определенное время. При появлении окна Table and Data Source Creator нажмите OK. Перейти к тестированию компонентов можно будет сразу после открытия универсального клиента тестирования. Для работы с компонентами этот клиент предлагает стандартный интерфейс, привычный по приложению "Проводник". Тем не менее, прежде всего необходимо "запустить" компоненты на данном сервере:

  1. В Project Explorer разверните узел EJB Projects;
  2. Разверните Deployment Descriptor : RAD tutorial;
  3. Разверните узел Entity Beans;
  4. Нажмите правой кнопкой мыши любой компонент, а затем выберите Run > Run on Server;
  5. Нажмите Finish в окне Server Selection.

Компонент должен появиться в универсальном клиенте тестирования в разделе EJB Beans (см. рисунок 12).

Рис. 12.Новый компонент в универсальном клиенте тестирования
Новый компонент в универсальном клиенте тестирования

Теперь вы можете перейти к детальному изучению и фактическому выполнению методов в созданных компонентах. Для начала необходимо создать используемый по умолчанию UniqueKeyGenerator:

  1. Разверните узел UniqueKeyGeneratorLocalHome;
  2. Выберите метод create(String);
  3. Так как метод create функционирует с определенными параметрами, в главном окне вы можете ввести требуемое значение. В данном случае, введите KEY;
  4. Нажмите Invoke. Если метод работает без ошибок, в результате будет выведена локальная ссылка (см. рисунок 13).

    Рис. 13.Создание UniqueKeyGenerator
    Создание UniqueKeyGenerator

На данном этапе вы можете перейти к работе с объектом, нажав кнопку Work with Object. Однако, прежде всего, вам необходимо создать и проверить компонент Item. При отсутствии каких-либо ошибок панели в окне программы должны выглядеть так, как показано на рисунке 14.

Рис. 14.Создание компонента Item
Создание компонента Item

Теперь вы создали компонент Item. Если вы нажмете Work with Object, сам компонент будет доступен в окне Explorer, при этом будут отображаться его публичные методы.

Тестирование других методов

К этому времени вы должны были ознакомиться с работой клиента тестирования, использование которого не составляет какого-либо труда. При необходимости проверки других созданных методов, например attachBid() и getStartingBid(), можно использовать представленный ниже процесс для тестирования компонента Item:

  1. Нажмите JNDI Explorer для клиента тестирования;
  2. Разверните узел [Local EJB Beans], а затем нажмите BidLocalHome. Компонент появится в Explorer в разделе EJB Beans;
  3. Создайте заявку, используя те же операции, что и при создании позиции:
    1. Разверните узел BidLocalHome;
    2. Выберите create();
    3. Нажмите Invoke;
    4. Нажмите Work with Object;
    5. Введите сумму и метку времени. К счастью, система заранее введет значения по умолчанию.
  4. Добавьте только что созданную заявку к существующему объекту. Если будет выбран метод attachBid(), в выпадающем меню Value будут отображаться существующие заявки;
  5. Таким же образом создайте еще несколько заявок и добавьте их к тому же самому объекту;
  6. Вернитесь к компоненту Item и проверьте следующие бизнес-методы: getStartingBid(), getCurrentBid() и getMaximumBid(). Проверьте, выдают ли они соответствующие заявки.

Понятно, что вы лишь поверхностно коснулись процессов разработки и тестирования. Тем не менее, вы смогли познакомиться с множеством функций Rational Application Developer и, тем самым, подготовиться к созданию собственных проектов.

Раздел 6. Заключение

В этой части руководства вы перешли от рассмотрения требований к созданию самого приложения. Платформа IBM Software Development Platform позволяет легко и быстро моделировать прецеденты, при этом генерирует для вас "основной" код, тем самым помогая сконцентрироваться на бизнес-методах, которые нужны вашим клиентам. Одновременная обработка модели и программного кода позволяет изучить их взаимоотношение.

Завершив написание кода, вы начинаете развертывание компонентов в среде WebSphere, в которой производится последующая отладка кода и устранение ошибок, после чего программный код может допускаться к формальному тестированию. Тесная интеграция WebSphere со средой разработки существенно облегчает переход к упомянутому тестированию.

По мере перехода к следующей фазе (тестирование и работа с запросами на изменение - тема части 3 данного руководства) вы начнете замечать, как модель постепенно обретает нужную форму. В то же время исходные требования и функциональность системы будут приближаться к своему окончательному формату.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=2614