В моем текущем проекте нам понадобится
BPEL- движок помимо нашей
реализации Mule CE . На самом деле, мы будем использовать Mule для связи между системами без сохранения состояния и использовать BPEL для процессов с сохранением состояния. Одна из возможных платформ для использования в качестве BPEL-движка —
Apache ODE . В этой статье я покажу вам, как вы можете запустить процесс BPEL в Apache ODE с помощью Mule. Как вы увидите, это всего лишь комбинация постов, которые я сделал ранее, но я думаю, что было бы хорошо, чтобы все было в одном посте.
Шаг 0: Предположения s
Предполагается:
- экземпляр Apache ODE (предпочтительно развернутый в Tomcat)
- Maven 2.2.0
- JDK 1.6
- NetBeans 6,8,
- Мул CE 2.2.2-SNAPSHOT
Конечно, это может работать с другой версией, но это те версии, которые я использовал.
Шаг 1. Создайте работающий процесс BPEL
Первый шаг — создать работающий пример BPEL. Я использую последнюю версию Netbeans для этого и этого поста . Чтобы использовать мастера SOA в новых Netbeans, вы должны включить это как расширение. Для создания примера BPEL выполните следующие шаги:
- Создание нового модуля BPEL с именем «TextModule»
- Добавить WSDL в проект
- Добавьте процесс BPEL в модуль, назовите его «txtLengthProcess»
Этот созданный процесс пуст, поэтому добавьте к нему функциональность, следуя инструкциям, приведенным в этом посте . В итоге я получил следующую диаграмму процесса: Отображение на шаге присваивания выглядит следующим образом: я создал необходимые переменные для назначения значений на шаге «получение» и «ответ».
- Создайте файл «deploy.xml».
Мой файл имеет следующее содержимое:<?xml version="1.0" encoding="UTF-8"?> <deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" xmlns:pns="http://www.pascalalma.net/TxtLengthProcess" xmlns:wns="http://www.pascalalma.net/TxtLengthService"> <process name="pns:TxtLengthProcess"> <active>true</active> <provide partnerLink="TxtLengthPartnerLink"> <service name="wns:TxtLengthServiceService" port="TxtLengthServicePort"/> </provide> </process> </deploy>
- Разверните его на экземпляр Tomcat, на котором выполняется Apache ODE.
Для развертывания процесса создайте каталог с именем «TxtLengthService» в папке «/ webapps / ode / WEB-INF / process». Скопируйте три файла (deploy.xml, TxtLengthProcess.bpel и TxtLengthService.wsdl) в этот каталог. После успешного развертывания вы увидите файл TxtLengthService.wsdl по адресу http: // localhost: 8080 / ode / services / listServices :
- (Необязательно) вы можете протестировать сервис с SoapUI.
При успешном запросе-ответе вы получите следующий результат:
package net.pascalalma.ws.test; import net.pascalalma.txtlengthservice.TxtLengthService; import org.junit.Test; /** * * @author pascal */ public class TestService { @Test public void testIt() { TxtLengthService service = new TxtLengthService(); String value = service.getTxtLengthServiceSOAP11PortHttp().txtLengthOperation("Pascal Alma"); System.out.println("result = " + value); } }
Шаг 3: Создайте проект MuleЧтобы позволить Mule вызвать процесс BPEL, я создал новый проект Maven, который может проверить вызов с помощью клиента Mule. Используемый «ode-test-config.xml» выглядит так:
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns="http://www.mulesource.org/schema/mule/core/2.2" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:test="http://www.mulesource.org/schema/mule/test/2.2" xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd http://www.mulesource.org/schema/mule/test/2.2 http://www.mulesource.org/schema/mule/test/2.2/mule-test.xsd http://www.mulesource.org/schema/mule/vm/2.2 http://www.mulesource.org/schema/mule/vm/2.2/mule-vm.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <model name="mule-ode"> <service name="start"> <inbound> <vm:inbound-endpoint path="msg-in" synchronous="true"/> </inbound> <component class="net.pascalalma.mule.BpelProcessClient" /> </service> </model> </mule>
Созданный класс компонента, который обрабатывает вызов клиента SOAP, выглядит следующим образом:
package net.pascalalma.mule; import net.pascalalma.txtlengthservice.TxtLengthService; /** * * @author pascal */ public class BpelProcessClient { public String callProcess(String request) { return new TxtLengthService().getTxtLengthServiceSOAP11PortHttp().txtLengthOperation(request); } }
И используемый тестовый класс выглядит так:
package net.pascalalma.mule; import org.junit.Test; import org.mule.api.MuleException; import org.mule.api.MuleMessage; import org.mule.module.client.MuleClient; import org.mule.tck.FunctionalTestCase; public class BpelProcessClientTest extends FunctionalTestCase { private MuleClient client = null; protected MuleClient getClient() { try { if (client == null) { client = new MuleClient(); } } catch (MuleException e) { throw new RuntimeException(e); } return client; } protected final String getConfigResources() { return "config/ode-test-config.xml "; } @Test public void testBpelTest() throws MuleException { MuleMessage msg = getClient().send("vm://msg-in", "123456789012345", null); System.out.println("payload = " + msg.getPayload()); } }
Когда тестовый класс выполняется, это приводит к следующему выводу:
************************************************** ********************
* Mule ESB и интеграционная платформа *
* Версия: 2.2.2-SNAPSHOT Сборка: 15252 *
* MuleSource, Inc. *
* Для получения дополнительной информации перейдите на на http://mule.mulesource.org *
* *
* Сервер запущен: 17.12.09 20:34 *
* Идентификатор сервера: 3d3eb71b-eb43-11de-bca6-7b92b51f04e0 *
* JDK: 1.6.0_17 (смешанный режим ) *
* Кодировка ОС: MacRoman, кодировка Mule: UTF-8 *
* ОС: Mac OS X (10.6.2, x86_64) *
* Хост: macbook-van-pascal-alma.local (192.168.1.204) *
* *
* Агенты, работающие: Нет *
********************************************* *************************
ИНФОРМАЦИЯ 2009-12-17 20: 34: 50,730 [main] org.mule.module.client.MuleClient: Использование существующего MuleContext: org.mule.DefaultMuleContext@1d6b6c55
ИНФОРМАЦИЯ 2009-12-17 20: 34: 50,756 [main] org .mule.transport.vm.VMMessageDispatcher: Connected: endpoint.outbound.vm: //
полезная информация msg-in = 15
INFO 2009-12-17 20: 34: 51,784 [main] org.mule.transport.vm.VMConnector: удаление прослушиватель конечной точкиUri: vm: // msg-in
INFO 2009-12-17 20: 34: 51,784 [main] org.mule.transport.vm.VMMessageReceiver: Disconnected: VMMessageReceiver {this = 5a56182f, receiveKey = msg-in, конечная точка = vm: // msg-in}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,785 [main] org.mule.component.DefaultJavaComponent: Остановка: org.mule.component.DefaultJavaComponent для компонента: SedaService {запуск}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,785 [main] org.mule.model.seda.SedaService: Запуск службы Mule успешно остановлен
INFO 2009-12-17 20: 34: 51,787 [main] org.mule.transport .vm.VMConnector: Остановка: VMConnector {this = 75d709a5, запущено = true, инициализировано = true, name = ‘connector.VM.0 ′, disposed = false, numberOfConcurrentTransactedReceivers = 4, createMultipleTransactedReceivers = true, подключено = true, connectedProtocols = [ vm], serviceOverrides = null}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,787 [main] org.mule.transport.vm.VMConnector: отключено: VMConnector {this = 75d709a5, запущено = false, инициализировано = true, name = ‘ соединитель.VM.0 ′, disposed = false, numberOfConcurrentTransactedReceivers = 4, createMultipleTransactedReceivers = true, подключено = false, supportProtocols = [vm], serviceOverrides = null}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,787 [main] org.mule.transport.vm.VMConnector: остановлен: VMConnector {this = 75d709a5, запущен = false, инициализирован = true, имя = ‘connector.VM.0 ′, disposed = false, numberOfConcurrentTransactedReceivers = 4, createMultipleTransactedReceivers = true, подключено = false, supportProtocols = [vm], serviceOverrides = null}
INFO 2009-12-17 20: 34: 51,788 [main] org.mule.util.queue.TransactionalQueueManager: Остановка ResourceManager
INFO 2009-12-17 20: 34: 51,788 [main] org.mule.util.queue.TransactionalQueueManager: Остановленный ResourceManager
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,788 [main] org.mule.transport.vm.VMConnector: удаление: VMConnector {this = 75d709a5, запущено = false, инициализировано = true, имя = ‘соединитель.VM.0 ′, disposed = false, numberOfConcurrentTransactedReceivers = 4, createMultipleTransactedReceivers = true, подключено = false, supportProtocols = [vm], serviceOverrides = null}
INFO 2009-12-17 20: 34: 51,788 [main] org.mule.transport.vm.VMMessageDispatcher Отключено: VMMessageDispatcher {this = 1915470e, конечная точка = vm: // msg-in, disposed = false}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,788 [main] org.mule.transport.vm.VMConnector: удален: VMConnector { this = 75d709a5, началось = false, инициализировано = false, name = ‘connector.VM.0 ′, disposed = true, numberOfConcurrentTransactedReceivers = 4, createMultipleTransactedReceivers = true, подключено = false, supportProtocols = [vm], serviceOverrides = null}
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,789 [main] org.mule.config.spring.MuleApplicationContext: закрытие org.mule.config.spring.MuleApplicationContext@356f144c: отображаемое имя [org.mule.config.spring.MuleApplicationContext @ 356f144c]; дата запуска [четверг, 17 декабря 20:34:49 CET 2009]; корень контекстной иерархии
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,789 [main] org.springframework.beans.factory.support.DefaultListableBeanFactory: уничтожение синглетонов в org.springframework.beans.factory.support.DefaultListableBeanFactory@29abc69: определение пользовательского объекта _mulePropertyPlaceholderProcessor, _muleSimpleRegistryBootstrap, _muleNotificationManager, _muleConfiguration, ._ muleNotificationManager :tification.1, ._ muleNotificationManager: messages.2,. ._muleNotificationManager: Notification.7._muleProperties, _muleEndpointFactory, _muleStreamCloserService, _defaultThreadingProfile, _defaultMessageDispatcherThreadingProfile, _defaultMessageRequesterThreadingProfile, _defaultMessageReceiverThreadingProfile, _defaultServiceThreadingProfile, _defaultRetryPolicyTemplate, мул-ода, старт, .start: inbound.11, .start: inbound.11: въездной-endpoint.12, .start: component.13 ]; корень фабричной иерархии
ИНФОРМАЦИЯ 2009-12-17 20: 34: 51,995 [main] org.mule.DefaultMuleContext:
****************************** ****************************************
* Мул выключается нормально: 12/17 / 09 20:34 *
* Сервер работал: 0 дней, 0 часов, 0 минут, 1,318 секунд *
************************* ********************************************* Выполнены
тесты: 1, Сбои: 0, Ошибки: 0, Пропущено: 0, Время истекло: 3.103 сек.Таким образом, завершив этот пост, вы сможете выполнить (простой) BPEL-процесс в Apache ODE с помощью Mule. Однако нет уверенности, что мы будем использовать Apache ODE, как это. Я думаю, что нам бы больше хотелось Intalio | server из-за удобных функций / инструментов, которые они добавили в Apache ODE.
Добавьте WSDL, описывающий веб-сервис (примечание: я не смог создать документально-документальный веб-сервис с мастером в Netbeans, поэтому впоследствии отредактировал источник вручную).