200 likes | 428 Views
Интеграция приложений с помощью WS-BPEL. Керівник. Відповідальний виконавець. П.І. Перконос. С.В. Суботін. Жизненный цикл WORKFLOW c использованием WS-BPEL в WEB. 5. Портали. В2В. .NET. Користувачі сервісів. 4. Потоки бізнес-процесів. 3. Сервіси ( атомарні, композитні ).
E N D
Интеграция приложений с помощью WS-BPEL. Керівник Відповідальний виконавець П.І. Перконос С.В. Суботін
Жизненный цикл WORKFLOW c использованием WS-BPEL в WEB 5 Портали В2В .NET Користувачі сервісів 4 Потоки бізнес-процесів 3 Сервіси (атомарні, композитні) 2 Компоненти 1 SAP Застосування Операційні системи Застосування Пакети застосувань Застосування замовника Платформи Сполучне ПО OS/390 DB2 MQ Unix Реинжениринг бизнеспроцессов проектирование разработка Выполнение SOAP
aX + bX +c = 0 2 Реинжениринг бизнеспроцесса Постановка задачи X1 = -b/2a+ (b*b-4ac)/4a*a Методика X2= -b/2a- (b*b-4ac)/4a*a Технологический цикл
UDDI Реестр Проектирование Декомпозиция процесса Поиск готовых компонент Проектирование недостающих UML диаграммы
Структура WS-BPEL документа • <wsdl:definitions …..> • Типы и структура сообщений , порты сервисов, типы связей между партнерами • </wsdl:definitions > <process …xlmns = пространства имен> </process > <variables> …… </variables> <partnerLinks> …… </ partnerLinks > <scope> </scope> <recieve> принять коэффициенты уравнения </recieve> <sequense расчет дискриминанта> <flow> расчет слагаемых </flow>… <if> fault| извлечение корня </if>… </sequence> <sequense расчет корней> ….. расчет знаменателя <flow> расчет слагаемых</flow>… <flow> расчет корней </flow> </sequence> <reply> вернуть решение </ reply> <FaultHandlers> нет корней!! </ FaultHandlers>
WSDL определение сервисов • <wsdl:definitions xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/” xmlns:s="http://www.w3.org/2001/XMLSchema" • ……..> • </wsdl:definitions > <wsdl:types> …… </ wsdl:types > <wsdl:message> …… </ wsdl:message> <wsdl:portType> …… <wsdl:operation> </ wsdl:operation> <wsdl:operation> </ wsdl:operation> …… </ wsdl:portType> <wsdl:service> …… <wsdl:port> </ wsdl:port> <wsdl:port> </ wsdl:port> …… </ wsdl:service>
WSDL определение типов даных • <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:ms ="http://isofts.kiev.ua/ws/summator" > • </wsdl:definitions > <wsdl:types> <s:schema elementFormDefault="qualified“targetNamespace"http://isofts.kiev.ua/ws/summator""> </wsdl:types>> <s:element name="Add"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="message" type="tns:AddMessage"/> </s:sequence> </s:complexType> </s:element> ….. <s:complexType name="AddMessage"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="a" type="s:float" /> <s:element minOccurs="1" maxOccurs="1" name="b" type="s:float" /> </s:sequence> </s:complexType> ….. <s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:float" /> </s:sequence> </s:complexType> </s:element>>
<wsdl:definitions xmlns:wsdl="http://isofts.kiev.ua/ws/summator> • </wsdl:definitions > <wsdl:types> <s:element name="Add"> … s:element name="AddResponse” …</wsdl:types>> Определение структуры сообщений <wsdl:message name=AddIn> <wsdl:part name=“operands” element=“tns: Add” /> </wsdl:message>> <wsdl:message name=AddOut> <wsdl:part name=“result” element=“tns: AddResponce”/> </wsdl:message>> Определение типов портов <wsdl:portType name=“Arihmetika”> <wsdl:operation name=“ADD” > <wsdl:input message= “tns:AddIn” /> <wsdl:output message=“tns:AddOut”/> </wsdl: operation> <wsdl:operation name=“MULT” > <wsdl:input message= “tns:AddIn” /> <wsdl:output message=“tns:AddOut”/> </wsdl: operation> </wsdl: portType>> Определение сервиса <wsdl:binding name=“ArihmetikaSoap” type= “tns:Aritmetika”> <soap:binding transport=“http://schemas.xmlsoap.org/soap/http” /> <wsdl:operation name=Add><soap:operation SoapAction=“http://isofts.kiev.ua/WS/Add” style=“document”/ > <wsdl:input ><soap:body use literal/> </wsdl:input> <wsdl:output> <soap:body use literal/> </wsdl:output> </wsdl: operation> <wsdl:operation name=“MULT” > ……. </wsdl: operation> </wsdl: binding>> <wsdl:service name=“Arihmetika”> <wsdl:port name =“Arihmetika” binding= “tns:ArihmetikaSoap”> <soap:location= =“http://isofts.kiev.ua/WS/Aritm.asmx” /> </wsdl:port> </wsdl: service>
Прием входящего сообщения. <wsdl:definitions > </wsdl:definitions > <wsdl:types> <s:schema elementFormDefault="qualified“targetNamespace"http://isofts.kiev.ua/ws/summator""> </wsdl:types>> <s:complexType name=“FlArray"> <s:sequence> <s:element minOccurs=“0" maxOccurs=“unbound" name=“k" type="s:float" /> </s:sequence></s:complexType> <s:element name="Array1D"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name=“K" type="tns:FlArray" /> </s:sequence> </s:complexType> </s:element> <wsdl:message name=“List”> <wsdl:part name=“items” element=“tns: Array1D” /> </wsdl:message>> <wsdl:portType name=“solve”><wsdl:operation name=“solve”> <wsdl:input message= “List” /> <wsdl:output message=“List”/> </wsdl: operation> </wsdl: portType>> <plnk:PartnerLinkType name =“solveReqw”> <plnk:rolename=“executor” porttype=“solve”/> <plnk:PartnerLinkType> <scope> </scope> <partnerLink name=“scientist”> partnerLinkType=“solveReqw” myRole=“executor” </partnerLink> <variables ><variable> name=“koef” messageType =“List” </variable ></variables > <receive name=“Start" partnerLink=“scientist” operation="Solve“ variable=“koef“ createInstance="yes" />
Расчетслагаемых дискриминанта <scope> </scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $koef.items.k[2] </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $koef.items.k[2] </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“b*b" partnerLink=“M1" operation=“Mult“inputVariable="o1" outputVariable=“p1"/> <scope> </scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $koef.items.k[1]*4 </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $koef.items.k[3] </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“4*a*c" partnerLink=“M1" operation=“Mult“inputVariable="o1" outputVariable=“p2"/> <wsdl:definitions > </wsdl:definitions > <import namespace>=“http://isofts.kiev.ua/WS/Arihmetikadef” location= “http://isofts.kiev.ua/WS/Arihmetika.wsdl” importType="http://schemas.xmlsoap.org/wsdl/wsdl.xsd” /> <plnk:PartnerLinkType name =“directAr”><plnk:rolename=“executor” porttype=“Arihmetika”/> <plnk:PartnerLinkType> <scope> </scope> <partnerLink name=“M1” partnerLinkType=“directAr” PartnerRole=“executor” > <EndPointReference> <address>=“http://isofts.kiev.ua/WS/Aritm.asmx”</address><ServiceName>Arihmetika</SeviceName></EndP..> </partnerLink> <variables> <variable>name=“p1” messageType =“AddOut”</variable> <variable>name=“p2” messageType” =“AddOut </variable></variables > <flow> </flow>
Расчетдискриминанта <scope> </scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p1.addresponce.AddResult</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from>- $p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“D" partnerLink=“M1" operation=“Add“inputVariable="o1" outputVariable=“p1"/> <wsdl:definitions > </wsdl:definitions > <import namespace>=“http://itf.kiev.ua/WS/InversArihm.def” location= “http://itf.kiev.ua/WS/inversArihm.wsdl” importType="http://schemas.xmlsoap.org/wsdl/wsdl.xsd” /> <plnk:PartnerLinkType name =“inversAr”><plnk:rolename=“executor” porttype=“invers”/> <plnk:PartnerLinkType> <scope> </scope> <partnerLink name=“M2” partnerLinkType=“inversAr” PartnerRole=“executor” >.. </partnerLink> <variables> <variable>name=“p1” messageType =“AddOut”</variable> <variable>name=“p2” messageType =“AddOut”</variable></variables > <sequense > </sequence> <if name=“Dless0”> <condition> $p1.addresponce.addResult < 0 </condition> <trow> faultname=“D_is_negative” </throw> <else><sequence> <invoke name=“sqrtD" partnerLink=“M2" operation=“Sqrt“inputVariable=“p1" outputVariable=“p2"/> </sequence> </else> </if>
Расчеткорней <scope> </scope> <variables><variable>name=“p1” ..”AddOut”</variable> ..“p2” ..“p3” “AddOut”…</variables > <partnerLink name=“M1” partnerLinkType=“directAr” PartnerRole=“executor” </partnerLink> <partnerLink name=“M2” partnerLinkType=“inversAr” PartnerRole=“executor” >.. </partnerLink> <sequense > </sequence> <flow> </flow> <scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> -$koef.items.k[2]</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x1p" partnerLink=“M1" operation=“Add“inputVariable="o1" outputVariable=“p3"/> </scope> <assign> <copy> <from> $koef.items.k[1]*2 </from> <to> $p1.addresponce.addResult</to> </copy> </assign> <invoke name=“1/2а" partnerLink=“M2" operation=“Invrs“inputVariable=“p1" outputVariable=“p1"/> <flow> </flow> <scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p1.addresponce.AddResult</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x1p" partnerLink=“M1" operation=“Add“inputVariable="o1" outputVariable=“p2"/> </scope> <scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> -$koef.items.k[2]</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> -$p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x2p" partnerLink=“M1" operation=“Add“inputVariable="o1" outputVariable=“p2"/> </scope> <scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p1.addresponce.AddResult</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p3.addresponce.AddResult]</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x2p" partnerLink=“M1" operation=“Add“inputVariable="o1" outputVariable=“p3"/> </scope>
Отправка исходящего сообщения. <wsdl:definitions > </wsdl:definitions > <wsdl:types> </wsdl:types>> <wsdl:message name=“List”> <wsdl:part name=“items” element=“tns: Array1D” /> </wsdl:message>> <wsdl:portType name=“solve”><wsdl:operation name=“solve”> <wsdl:input message= “List” /> <wsdl:output message=“List”/></wsdl: operation> </wsdl: portType>> <plnk:PartnerLinkType name =“solveReqw”> <plnk:rolename=“executor” porttype=“solve”/><plnk:PartnerLinkType> <scope> </scope> <partnerLink name=“scientist”> partnerLinkType=“solveReqw” myRole=“executor” </partnerLink> <variables ><variable> name=“koef” messageType =“List” </variable ></variables > <scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p3.addresponce.AddResult</from> <to>$koef.items.k[1]</to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult</from> <to> >$koef.items.k[2]</to> </copy> </assign> <reply name=“Finish" partnerLink=“scientist” operation="Solve“ variable=“koef”/> <Faulthandlers> <Catch faultname=“D_is_negative”> <Reply name=“Finish" partnerLink=“scientist” operation="Solve“ variable=“koef” faultName=" D_is_negative " /> </Catch> <CatchAll> <rethrow> </rethrow> </CatchAll> </Faulthandlers>
Подходы к построению распределѐнных корпоративных информационных систем. Подсистема Подсистема Подсистема EnterpriseServiceBus Взаимодействие всех приложений через единую точку, которая, при необходимости, обеспечивает транзакции, преобразование данных, сохранность обращений. Обеспечивается большая гибкость, простоа масштабирования. При замене одного приложения подключенного к шине нет необходимости перенастраивать остальные. NetWeaver XI/PI BizTalk WebSphere JBoss
Пример интеграции разнотипных приложений. ФАРМАК IT предприятие BizTalk СФЕРА SAP
Решения BIZTALK. Адаптерыдля основных протоколов: FILE, HTTP, SOAP, FTP, POP3, SMTP, SQL… Publish / subscribe Architecture Message broker.EAIB2BBPM. SOA WSBPEL
Оркестровка и хореография. При хореографии бизнес-процессов не требуется центральный координатор, поскольку каждый веб-сервис "знает", когда выполнять свои операции и с каким другим веб-сервисом он взаимодействует.Языками моделирования для описания хореографии выступают WS-CDL (от W3C) и ebXML (от OASIS).... м Орекестровка предполагает наличие центрального процессора, который вызывает веб-сервисы. Веб-сервисы в этом случае "не знают", что они участвуют в более глобальном бизнес-процессе.Языками моделирования для описания оркестровки являются WS BPEL XPDL и др.