Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Разработка составных бизнес-сервисов на базе сервис-ориентированной архитектуры (SOA): Часть 4. Разработка измеряемых составных приложений

С помощью Common Event Infrastructure

Хавьер Гарсиа, инженер-программист, IBM
Хавьер Гарсиа – инженер-консультант, более 20 лет занимающийся разработкой ПО. Сейчас он работает в отделе планирования и технологий компании SWG и занимается в основном SOA и составными приложениями.
ДуоВей/Дэвид Сун (DuoWei/David Sun), штатный инженер-программист, IBM
ДуоВей/Дэвид Сун (DuoWei/David Sun) - инженер по программному обеспечению в лаборатории по разработке ПО в Китае (CSDL). В данный момент он работает в области SOA. Вы можете связаться с ним по адресу sunduow@cn.ibm.com.
Чжи Гань, инженер-программист, IBM
Чжи Гань - инженер-программист в Китайской лаборатории разработчиков компании IBM. Он пришел в IBM доктором наук в области компьютерной безопасности (Шанхайский университет им. Цзяо-Туна). У него большой опыт в области SOA, AOP и Eclipse. Сейчас он в основном занимается разработкой на основе моделей с шаблонами.

Описание:  Данная статья - четвертая в серии, которая рассматривает разработку составных приложений для операций бизнес-сервисов. Для определения того, удовлетворяет ли составное приложение поставленным бизнес-целям, необходимо, чтобы это приложение было измеряемым. Данная статья рассматривает, как разрабатывать измеряемые составные приложения при помощи трех артефактов повторного использования, которые основаны на общей инфраструктуре событий (Common Event Infrastructure). Вы увидите, для чего необходимы эти артефакты и и как их использовать для численных оценок составного приложения.

Больше статей из этой серии

Дата:  02.07.2007
Уровень сложности:  средний
Активность:  597 просмотров
Комментарии:  


Введение

WebSphere® Integration Developer и WebSphere Process Server представили Common Event Infrastructure (CEI) в качестве средства обеспечения управления основными событиями. CEI обрабатывает основные общие события (Common Base Events - CBE) в соответствии с спецификациями CBE. CEI предоставляет стандартный формат на основе XML для событий, и это позволяет стандартным механизмам как регистрировать события, так и запрашивать их. Встроенная поддержка CEI в WebSphere Integration Developer генерирует события CBE. Например, можно запустить операцию на языке Business Process Execution Language (BPEL) и потом выбрать события, запущенные или остановленные операцией, и при этом автоматически генерируются CBE. Однако может потребоваться генерация событий на уровне бизнеса, которые не соответствуют событиям в WebSphere Integration Developer. Вы можете увидеть это при помощи интерфейса Business Process Engine (BPE). Но поскольку этот API-интерфейс показывает формат CBE и другие атрибуты CEI, соответствующие части интерфейса содержатся в наборе легких в применении артефактов, которые поддерживают журналирование, запросы и просмотр событий. Данная статья объясняет суть этих артефактов и их использование в составном приложении.

Захват событий бизнес-уровня

Для численных оценок составного приложения нужно собрать информацию о событиях бизнес-уровня. Это события, которые получают информацию, относящуюся к данному бизнесу. Например, событие фиксируется, когда банк выполняет перевод с одного счета на другой. События бизнес-уровня дают нам возможность понять и усовершенствовать деятельность предприятия. После того, как бизнес-события зафиксированы, их можно объединить для анализа бизнес-тенденций, а это, в свою очередь, даст фактическую информацию для совершенствования вашего бизнеса. Но события бизнес-уровня не всегда соответствуют конкретной операции WebSphere Integration Developer. Операция WebSphere Integration может соответствовать последовательности шагов WebSphere Integration Developer. Рисунок 2 показывает некоторые типичные операции WebSphere Integration Developer. Событие бизнес-уровня может соответствовать серии операций WebSphere Integration Developer.

Еще одно требование - полной измеряемости - относится к способности удерживать произвольную информацию о событии. Эта произвольная информация имеет значение для бизнес-уровня. Спецификация CBE поддерживает персистентную произвольную информацию с помощью раздела CBE ExtendedDataElement. Этот раздел форматирует информацию, специфическую для данного приложения, как набор пар имя/значение.


Генерация CBE-событий

Каждый тип компонента, доступного для мониторинга, например, бизнес-процессы и бизнес-правила, имеет набор заранее назначенных бизнес-событий в WebSphere Integration Developer (см. Таблицу 1). Но иногда наличие этих назначенных событий не обеспечивает достаточной гибкости для генерации событий бизнес-уровня. Поэтому для придания полной измеряемости вашему составному приложению необходимо всегда генерировать события бизнес-уровня.


Таблица 1. Элементы, подлежащие мониторингу для всех редакторов
РедакторЭлемент мониторинга
Редактор сборки (только CEI)Операция
Редактор бизнес-процессов (CEI и Audit Log)Assign, Compensate, Empty, Flow (параллельные действия), Invoke, Pick (получение выбора), Process, Receive, Reply, Rethrow, Scope, Script, Sequence, Staff, Switch (выбор), Template (не показан), Terminate, Throw, Variable, Wait, While (цикл с проверкой условия)
Редактор отображения бизнес-объектов (только CEI)Отображение (Map), Трансформации всех типов
Редактор правил для бизнес-группы (только CEI)Операция
Редактор машины бизнес-состояний (State Machine) (только CEI)Action, Entry, Exit, Guard, State, State Machine Definition (State Machine), Timer, Transition
Редактор заданий для персонала (CEI и Audit Log)Escalation, Task, Task Template (не показан)
Редактор отображения в интерфейсе (только CEI)Связывание операций и посреднические механизмы для параметров всех типов (Operation Binding, Parameter mediation)
Редактор селектора (только CEI)Операция

Примечание: В Таблице 1 события, которые определены как Audit Log, генерируются в качестве событий аудита в базе данных хореографа процессов. События, определенные как CEI, генерируются в хранилище данных CEI.


Таблица 2. Действия и соответствующие им по умолчанию события
Действие (Activity)Имя события по умолчанию
Invoke (Вызов)Completion forced, Entry, Exit, Expired, Failed, Retry forced, Skipped, Stopped, Terminated
Process (Обработка)Compensated, Compensating, Compensation failed, Correlation, Deleted, Entry, Event handler escalated, Event received, Exit, Failed, Failing, Restarted, Resumed, Suspended, Terminated, Terminating, Work item created, Work item deleted, Work item transferred
Receive (Получение)Entry, Exit, Terminated
Reply (Ответ)Exit, Failed, Skipped
Scope (Диапазон)Compensated, Compensating, Compensation failed, Entry, Event handler escalated, Event received, Exit, Failed, Failing, Skipped, Terminated
Staff (Персонал)Assigned, Completion forced, Created, Deassigned, Escalated, Exit, Expired, Failed, Fault set, Output set, Retry forced, Skipped, Stopped, Terminated, Work item created, Work item deleted, Work item refreshed, Work item transferred
Template (Шаблон - не показан)Deleted, Entry


Просмотр CBE

Для нахождения и анализа CBE имеются две опции.

  • Браузер событий CBE Event Browser, поставляемый с WebSphere Process Server, предоставляет простое представление CBE, и его можно запускать в WebSphere Integration Developer из представления сервера или из браузера, расположенного здесь: http://localhost:9060/ibm/console/cbebrowser. Этот вариант полезен для разработчиков, которые хотят видеть генерируемые события (см. рисунок 1).
  • Можно использовать и другую программу для доставки событий и выполнения анализа и презентации. Артефакты поддерживают эту возможность.

Рисунок 1. Браузер событий CBE
Браузер событий CBE

Работа с CEI-артефактами повторного использования

Для того, чтобы обрабатывать события бизнес-уровня, см. три стандартных артефакта в разделе Загрузка. События бизнес-уровня можно генерировать при помощь CEIEventEmitter, запрашивать с помощью CEIQueryService или просматривать при помощи CEIMeteringViewPortlet.

Использование CEIEventEmitter

CEIEventEmitter (см. рисунок 2) позволяет генерировать события бизнес-уровня либо из фрагмента Java™, либо когда их вызывает из бизнес-процесса компонент сервисно-компонентной архитектуры (SCA). Это событие может коррелировать с событием бизнес-уровня и содержать произвольный набор пар имя-значение.


Рисунок 2. Диаграмма классов для CEIEventEmitter
Диаграмма классов для CEIEventEmitter

Генерация события из Java-кода

Листинг 1 показывает пример генерации события бизнес-уровня из Java-кода. Можно также воспользоваться платформой Factory Pattern для создания источника событий и последующего его вызова с нужными данными. Возможно сгенерировать регистрируемое событие (emitLogMessage), содержащее простое сообщение, или стандартное событие (emitEvent), в котором содержатся eventName, eventTrackingId и набор пар имя-значение с информацией о событии.


Листинг 1. Java-фрагмент
                
ICEIEventEmitter eventEmitter = CEIEventManagementFactory.createEventEmitter();
eventEmitter.emitLogMessage(String application, String eventTrackingId, String message);
eventEmitter.emitEvent(String application, String eventTrackingId, String event,
                       String[] eventDataName, String[] eventDataValue)
                       throws CEIEventException;

Код eventTrackingId коррелирует все связанные события. Например, для одного бизнеса-процесса вы, возможно, будете всегда использовать один eventTrackingId. Это событие представляет собой строку, которая идентифицирует происходящие события бизнес-уровня. При создании семантически значимых имен для событий можно использовать двоеточия, например, WPS:BusinessLevelEvent:FundTransferEvent.

В Листинге 2 приводится фрагмент кода для банковского приложения, позволяющий регистрировать событие бизнес-уровня во время перевода между счетами.


Листинг 2. Пример банковского приложения, использующего CEIEventEmitter
                
// Bean implementation class for Enterprise Bean: AccountTransferService
public class AccountTransferServiceBean implements javax.ejb.SessionBean {
  //some code is ignored here
  public void makeTransfer( String bankId, String fromAccId, String toAccId,
                            BigDecimal amount, String description)
                             throws EJBException, TransferException {
    // some code is ignored here
    try {
      fromTransaction = transactionsLocalHome.create(time.toString(),
                                                   fromAccId,fromBankId,"Transfer",time);
      fromTransaction.setDescription(description);
      fromTransaction.setTotal(amount);
      fromTransaction.setToaccid(toAccId);
    } catch (CreateException e2) {  e2.printStackTrace();} 
		
    meterDebitEvent(fromBankId,fromAccount.getCustomerid(),fromAccId,amount);
    meterCreditEvent(toBankId,toAccount.getCustomerid(),toAccId,amount);
  }

  private void meterDebitEvent( String bankId,String userId,String fromAcc,
                                BigDecimal amount) {
    try {
      ICEIEventEmitter emitter = CEIEventManagementFactory.createEventEmitter();
      emitter.emitEvent("Jivaro", "Jivaro", "transfer_funds", new String[] {
                        "OpCode", "AgentID", "BfsID", "SubscriberID", "UserID",
                        "HostName", STATIC_Metering_ACTID, STATIC_Metering_AMOUNT},
                        new String[] {  STATIC_Metering_DEBIT_OPCODE,
                        STATIC_Metering_AGENTID, STATIC_Metering_BFSID, bankId, userId,
                        java.net.InetAddress.getLocalHost().getHostName().toString(),
                        fromAcc, amount.toString()});
    } catch(Exception e)  { e.printStackTrace(); }
  }

  private void meterCreditEvent(String bankId,String userId,String toAcc,
                                BigDecimal amount) {
  }
  // some code is ignored here
}

Генерация события из SCA-компонента

Код CEIEventEmitterRouter (в загружаемых артефактах) упаковывает код CEIEventEmitter в виде Web-сервиса. Потом можно импортировать этот Web-сервис в WebSphere Integration Developer и привязать к нему вызывающий SCA-компонент (см. рисунок 3), который позволяет вызывать CEIEventEmitter в качестве сервиса. Если это сказывается на производительности, можно включить эти артефакты в SCA-модуль и вызвать его, как стандартный компонент Java.


Рисунок 3. CEIEventEmitter как Web-сервис
CEIEventEmitter как Web-сервис

Использование CEIQueryService

CEIQueryService (см. рисунок 6) позволяет запрашивать статус персистенции CEI и возвращать данные из CBE в указанной корреляционной сфере. Эта корреляционная сфера группирует все связанные CBE.

Когда CEIEventEmitter удерживает события, trackingId формирует корреляционную сферу, а она используется для корреляции связанных событий. Можно извлекать все связанные CBE-события. Интерфейс для этого артефакта - Web-сервис, а события выводятся в виде объектов Plain Old Java Object (POJO), а не CBE, для обеспечения легкости доступа.

Этот артефакт состоит из двух частей. Первая часть - сам Web-сервис и связанные с ним артефакты, содержащиеся в EAR-файле CEIQueryServiceEAR. Эти артефакты развертываются на экземпляре WebSphere Process Server. Вторая часть артефакта CEIQueryService - клиентский интерфейс для Web-сервиса и связанных с ним прокси-классов. Он хранится в EAR-файле CEIQueryServiceClientEAR. Клиентский интерфейс - EAR-файл для обеспечения легкого доступа к WAR для тестирования. Клиентский проект обеспечивает прокси WebService и необходимые классы для вызова операций CEIQueryService. Как правило, Web-сервис запускают созданием экземпляра CEIQueryServiceProxy и последующим вызовом нужной операции Web-сервиса. Данные возвращаются в объекте CEIQueryEvent, который содержит массив объектов CEIQueryEventData.


Рисунок 4. Диаграмма класса CEIQueryService
Диаграмма класса CEIQueryService

Имеются примеры того, как вызывать CEIQueryWebService, расположенный в CEIQueryServiceClientWeb\WebContent\sampleCEIQueryServiceProxy. Этот пример позволяет тестировать Web-сервис с помощью сгенерированного прокси. Выберите TestClient.jsp, а затем Run > Run on Server. Откроется Web-браузер, и вы сможете выбрать запускаемую операцию. Не забудьте сменить конечную точку, если сервис расположен на удаленном хосте.

Примечание: Для успешной компиляции всех проектов необходимо убедиться в том, что файл WPS_RUNTIME/CEI/client/events-client.jar находится по адресу пути сборки проекта. WPS_RUNTIME - это директория, в котором установлен WebSphere Process Server, например, C:/Program Files/IBM/Rational/SDP/6.0/runtimes/bi_v6.

Использование CEIMeteringViewPortlet

CEIMeteringViewPortlet (см. Рисунок 5) - это портлет, который позволяет осуществлять просмотр событий (c цифровыми данными), которые были созданы с помощью CEIEventEmitter. Портлет CEIMeteringPortlet извлекает события при помощи сервиса CEIQueryService и перечисляет их на странице портлета (см. Рисунок 6). Этот портлет позволяет пользователю отобрать события по дате, актору (agent) или подписчику.


Таблица 3. Описание полей
Название критериевПрименение
Дата началаСобытия, сгенерированные ранее этой даты, не отображаются.
Дата окончанияСобытия, сгенерированные позже этой даты, не отображаются.
АкторПоказываются события, которые генерирует данный актор. Актор - это строка, которая идентифицирует источник события. Это произвольная последовательность, которую выбирает приложение для отправки события. Она соответствует атрибуту sourceComponentId/@application attribute в CBE.
ПодписчикПоказываются события, на которые подписан данный подписчик. Подписчик - это строка, которую выбирает источник событий. Она идентифицирует участников, которым нужна информация о данном событии. Она соответствует ExtendedDataElement в CBE, который называется SubscriberID.

Поля критериев фильтрации необязательны для заполнения. Портлет использует для фильтрации событий только доступные ему критерии. Это свойство особенно полезно для многих событий.

Одно из свойств этого портлета - способность использовать для фильтрации строку запроса XPATH. CEIMeteringPortlet конструирует строку запроса XPATH из критериев, определенных пользователем, и отправляет эту строку запроса сервису CEIQueryService. Тогда CEIQueryService берет строку запроса XPATH и возвращает события, отфильтровывая те, которые не обладают соответствием (non-compliant).


Рисунок 5. Диаграмма класса для CEIMeteringViewPortlet
Диаграмма класса для CEIMeteringViewPortlet

Рисунок 6. Общее представление CEIMeteringViewPortlet
Общее представление CEIMeteringViewPortlet

Можно выбрать событие, чтобы просмотреть его атрибуты подробнее (см. рисунок 7).


Рисунок 7. Подробное представление CEIMeteringPortlet
Подробное представление CEIMeteringPortlet

Заключение

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



Загрузка

ОписаниеИмяРазмерМетод загрузки
Assets projects in server side for this article1assetsserviceside.zip117KBHTTP
Assets projects in client side for this articleassetsportlet.zip2832KBHTTP
List of all projects in above downloadable filesprojectlist.zip6KBHTTP

Информация о методах загрузки

Заметка

  1. Артефакты представлены в формате Project Interchange Format. Чтобы их импортировать, следует просто выбрать File>Import, а затем Project Interchange.

Ресурсы

Научиться

Обсудить

Об авторах

Хавьер Гарсиа – инженер-консультант, более 20 лет занимающийся разработкой ПО. Сейчас он работает в отделе планирования и технологий компании SWG и занимается в основном SOA и составными приложениями.

ДуоВей/Дэвид Сун (DuoWei/David Sun) - инженер по программному обеспечению в лаборатории по разработке ПО в Китае (CSDL). В данный момент он работает в области SOA. Вы можете связаться с ним по адресу sunduow@cn.ibm.com.

Чжи Гань - инженер-программист в Китайской лаборатории разработчиков компании IBM. Он пришел в IBM доктором наук в области компьютерной безопасности (Шанхайский университет им. Цзяо-Туна). У него большой опыт в области SOA, AOP и Eclipse. Сейчас он в основном занимается разработкой на основе моделей с шаблонами.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=SOA и Web-сервисы
ArticleID=237374
ArticleTitle=Разработка составных бизнес-сервисов на базе сервис-ориентированной архитектуры (SOA): Часть 4. Разработка измеряемых составных приложений
publish-date=07022007
author1-email=javierg@us.ibm.com
author1-email-cc=
author2-email=sunduow@cn.ibm.com
author2-email-cc=
author3-email=ganzhi@cn.ibm.com
author3-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).