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. Этот раздел форматирует информацию, специфическую для данного приложения, как набор пар имя/значение.
Каждый тип компонента, доступного для мониторинга, например, бизнес-процессы и бизнес-правила, имеет набор заранее назначенных бизнес-событий в 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 Event Browser, поставляемый с WebSphere Process Server, предоставляет простое представление CBE, и его можно запускать в WebSphere Integration Developer из представления сервера или из браузера, расположенного здесь: http://localhost:9060/ibm/console/cbebrowser. Этот вариант полезен для разработчиков, которые хотят видеть генерируемые события (см. рисунок 1).
- Можно использовать и другую программу для доставки событий и выполнения анализа и презентации. Артефакты поддерживают эту возможность.
Рисунок 1. Браузер событий CBE
Работа с CEI-артефактами повторного использования
Для того, чтобы обрабатывать события бизнес-уровня, см. три стандартных артефакта в разделе Загрузка. События бизнес-уровня можно генерировать при помощь CEIEventEmitter, запрашивать с помощью CEIQueryService или просматривать при помощи CEIMeteringViewPortlet.
CEIEventEmitter (см. рисунок 2) позволяет генерировать события бизнес-уровня либо из фрагмента Java™, либо когда их вызывает из бизнес-процесса компонент сервисно-компонентной архитектуры (SCA). Это событие может коррелировать с событием бизнес-уровня и содержать произвольный набор пар имя-значение.
Рисунок 2. Диаграмма классов для 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-сервис
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
Имеются примеры того, как вызывать 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
Рисунок 6. Общее представление CEIMeteringViewPortlet
Можно выбрать событие, чтобы просмотреть его атрибуты подробнее (см. рисунок 7).
Рисунок 7. Подробное представление CEIMeteringPortlet
Эта статья рассказывает, почему при создании составного приложения важно сделать его измеряемым. Здесь описана роль событий бизнес-уровня и три артефакта, которые можно использовать для генерации, запроса и просмотра событий бизнес-уровня в контексте составного приложения. При помощи этих артефактов повторного использования ваше составное приложение можно сделать измеряемым, а это - основа для совершенствования бизнес-процесса в целом.
| Описание | Имя | Размер | Метод загрузки |
|---|---|---|---|
| Assets projects in server side for this article1 | assetsserviceside.zip | 117KB | HTTP |
| Assets projects in client side for this article | assetsportlet.zip | 2832KB | HTTP |
| List of all projects in above downloadable files | projectlist.zip | 6KB | HTTP |
Заметка
- Артефакты представлены в формате Project Interchange Format. Чтобы их импортировать, следует просто выбрать File>Import, а затем Project Interchange.
Научиться
- Оригинал статьи: Building SOA composite business services, Part 4: Develop measurable composite applications with the Common Event Infrastructure.
- Воспользуйтесь RSS-каналом для запроса уведомления о выходе следующих статей из этой серии. (Узнайте больше о RSS с контентом developerWorks.)
-
Здесь вы найдете спецификации и дополнительные материалы по Business Process Execution Language для Web-сервисов.
-
По этой ссылке вы найдете спецификацию Common Base Event.
-
Получите новую информацию из статьи Передовой опыт в использовании Common Base Event и Common Event Infrastructure.
-
См. Передовой опыт управлению событиями - здесь находятся дополнительные материалы по управлению.
-
Посетите Передовой опыт Common Base Event: Как больше не ошибаться.
-
Получите дополнительную информацию с сайта Передовой опыт Common Base Event: Обзор свойств и элементов.
-
Будьте в курсе технических событий и web-трансляций developerWorks.
-
Web-сайт IBM по вопросам SOA дает обзор SOA и рекомендации IBM по их использованию.
-
Посетите раздел SOA и Web-сервисы на сайте developerWorks и узнайте новое об архитектуре SOA.
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Примите участие в блогах developerWorks и станьте членом сообщества developerWorks.
Хавьер Гарсиа – инженер-консультант, более 20 лет занимающийся разработкой ПО. Сейчас он работает в отделе планирования и технологий компании SWG и занимается в основном SOA и составными приложениями.
ДуоВей/Дэвид Сун (DuoWei/David Sun) - инженер по программному обеспечению в лаборатории по разработке ПО в Китае (CSDL). В данный момент он работает в области SOA. Вы можете связаться с ним по адресу sunduow@cn.ibm.com.
Чжи Гань - инженер-программист в Китайской лаборатории разработчиков компании IBM. Он пришел в IBM доктором наук в области компьютерной безопасности (Шанхайский университет им. Цзяо-Туна). У него большой опыт в области SOA, AOP и Eclipse. Сейчас он в основном занимается разработкой на основе моделей с шаблонами.