Как механизм рабочего процесса получает внешнее событие? - PullRequest
0 голосов
/ 09 сентября 2010
WorkflowRuntime workflowRuntime = new WorkflowRuntime();

 ExternalDataExchangeService dataExchangeService;
 dataExchangeService = new ExternalDataExchangeService();
 workflowRuntime.AddService(dataExchangeService);

 PaymentProcessingService paymentProcessing;
 paymentProcessing = new PaymentProcessingService();
 dataExchangeService.AddService(paymentProcessing);

Используя приведенный выше код, наше приложение может использовать paymentProcessing.RaiseXXXXEvent для взаимодействия с экземпляром рабочего процесса.Мой вопрос: каков принцип реализации такого механизма?Я думаю, что это своего рода Event Driven Pattern , но как я могу реализовать этот механизм и почему?Пожалуйста, укажите мне направление или любые ссылки приветствуются.

Кстати, есть ли механизм в jBPM?Включает ли jBPM рабочий процесс последовательности и рабочий процесс конечного автомата, например основание рабочего процесса окна?

Спасибо!

1 Ответ

0 голосов
/ 09 сентября 2010

WF определяет набор основных служб рабочего процесса, которые обрабатывают планирование потоков, рабочий процесс постоянство, транзакции и отслеживание рабочего процесса. Дизайнеры WF могли бы встроить реализация этих сервисов в самом движке времени выполнения, но они мудро решили использовать их размещение их реализации в подключаемых службах. Это дает вам контроль . Вам решать какие сервисы использовать (некоторые являются необязательными) и какую реализацию использовать для каждого сервиса.

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

Чтобы ваша локальная служба была доступна для вашего экземпляра рабочего процесса. Есть несколько способов сделать это. Простейшим было бы использовать CallExternalMethodActivity и настроить его.

Также служба должна иметь интерфейс и оформляться с помощью [ExternalDataExchange].

Если вы хотите написать свою собственную реализацию базовой службы, вот ссылка, которая описывает, как предоставить собственную базовую службу рабочего процесса 1012 *.

http://msdn.microsoft.com/en-us/library/ms734705(v=VS.90).aspx

...