320 likes | 469 Views
Enhancing a BPEL4WS Engine Supporting the Execution of Flexible WS-flows According to the ReFFlow Model. Alejandro Houspanossian Advisor: Prof. Dr. Mariano Cilia April 2006 Tandil, Argentina. Agenda. Introduction Systems Integration and Workflow Technology
E N D
Enhancing a BPEL4WS Engine Supporting the Executionof Flexible WS-flows According to the ReFFlow Model Alejandro Houspanossian Advisor: Prof. Dr. Mariano Cilia April 2006 Tandil, Argentina
Agenda • Introduction • Systems Integration and Workflow Technology • Context: The BPEL model, BPEL engines, etc. • Motivation & Goals • Enhancement Analysis • ActiveBPEL: An Open Source BPEL Engine • Adopting Open Source Software • Our Extensions • Enhancing ActiveBPEL • Conclusions & Future Work Enhancing a BPEL Engine - April '06
Introduction • Support for Automated Business Processes • (Automated trading relationships) • Coordination of heterogeneous and distributed systems • (of different companies) • Coordination (Orchestration) • Workflow Technology • Workflow description languages • 2 level programming model • Workflow engines • Systems Integration • Service Oriented Architectures (SOAs) • Web services (WSs) Enhancing a BPEL Engine - April '06
Our Context: BPEL(4WS) • Business Process Execution Language for Web Services: BPEL(4WS) • Workflows + Web Services • Standard technology • Supported by IBM, MS, SAP, BEA (and others) • (Open) Specification (v1.1) released on 2003 • Business processes • are defined as compositions of Web Services (WS-flows) • Using the BPEL Language (XML-based) • and then deployed into and executed by • BPEL Engines • Applications: Document Processing, Groupware, Healthcare Systems, Supply Chain Management, etc. • Enterprise Application Integration • Business-to-Business Interactions Enhancing a BPEL Engine - April '06
The BPEL Model: an Example <process name="loanApprovalProcess" ...> <flow> <links .../> <receive name="receive1" createInstance="yes" portType="apns:loanApprovalPT" ... </receive> <invoke name="invokeapprover" portType="apns:loanApprovalPT"> </invoke> <invoke name="invokeAssessor" portType="asns:riskAssessmentPT"> ... </invoke> <reply name="reply" portType="apns:loanApprovalPT" ... </reply> <assign name="assign"> ... </assign> </flow> </process> BPEL-Compliant Engine Enhancing a BPEL Engine - April '06
Problems with BPEL WS-flows • Business processes are long running processes • execution can take days, weeks or months… • Once deployed, processes cannot adapt • WS failures • Changing business requirements • BUT no run time flexibility is provided • BPEL does not provide such constructs • Which is required in today’s business context • This is the issue we address in this work Enhancing a BPEL Engine - April '06
Motivation & Goal • The ReFFlow Project (@ TU Darmstadt, Germany): • Dimka Karastoyanova’s Doctoral Dissertation • Research project in the field of e-commerce and B2B • An enhanced BPEL model is proposed • an enhanced BPEL Engine is required … • Goal of this Work • Propose and provide an enhanced BPEL engine to support the execution of WS-flows defined according to the ReFFlow Model Enhancing a BPEL Engine - April '06
Alternative Approaches • Develop a BPEL engine from scratch • Workflow engines are complex systems • Its development is (time-)expensive • Enhance an existing BPEL engine • Many existing BPEL engines • Some of them are Open-Source • Trend towards open-source software (OSS) • academic, governmental and even industrial projects • can be modified and extended as desired • reuse !! Enhancing a BPEL Engine - April '06
Enhancing a BPEL engine • Which engine to enhance? • Twister, ActiveBPEL, … • Which are the enhanced features? • New language constructs, status dissemination • How to implement the extensions? • According to standards and current trends • How to integrate the extensions into an standard BPEL engine? • Flexible approach required Enhancing a BPEL Engine - April '06
100% BPEL v1.1 compliant Open-Source Java Project Robust product, strongly supported by a commercial company Aprox. 700 java classes Based on servlet containers and app. servers v1.0 released in October 2004 Active development, stable releases once or twice a month Bug corrections Feature Enhancement Non structural changes ActiveBPEL: an Open-Source BPEL Engine We decided to adopt ActiveBPEL Understand and Extend OSS Enhancing a BPEL Engine - April '06
Enhanced Features • Which are the enhancements? • Find and bind • Evaluate • Attaching loosely-coupled clients Enhancing a BPEL Engine - April '06
Fault ! The find-and-bind Mechanism 4 – Select WS 1-On fault detected Find-and-Bind (Core functionality) 5-Replace WS 2-Find Compliant Services 3-List of Matching Services Enhancing a BPEL Engine - April '06
The find-and-bind Mechanism* (Cont.) <?xml version="1.0" encoding="UTF-8"?> <process name="MyLoanBusinessProcess"...> ... <invoke partnerLink=“assessor" portType=“asns:riskAssessmentPT” operation=“assess” inputVariable=“assessmentRequest” outputVariable=“assessment”> <find_bind policy_id="PickOne"/> </invoke> ... </process> find-and-bind (Core) Using WSDL in UDDI TN UDDI Spec. WSDL Spec. UDDI4J Public UDDI Registry • * Implementation Presented in the 9th IEEEInternational Enterprise Distributed Object Computing Conference (EDOC 2005), Enschede, The Netherlands, September 2005: Karastoyanova, Houspanossian, Cilia, Leymann, Buchmann Enhancing a BPEL Engine - April '06
The Evaluate Mechanism <?xml version="1.0" encoding="UTF-8"?> <process name="MyCurrencyConverterBP"...> ... <invoke partnerLink="rate" portType="ws1:MyCurrencyRateService" operation="getRate" inputVariable="rateRequest" outputVariable="rate"> <evaluate activated="no" changeType="portType/operation" substitute="newPortType/newOperation" policy_id="PickOne"/> </invoke> ... </process> PortType A <evaluate> PortType B Enhancing a BPEL Engine - April '06
The Evaluate Mechanism (Cont.) Enhancing a BPEL Engine - April '06
Attaching Loosely Coupled Clients Monitoring BPEL events Extended BPEL engine BPEL engine (open-source) Auditing … Observe 1:N Listen Disseminate Enhancing a BPEL Engine - April '06
Enabling the Attachment of Loosely Coupled Clients • This extension must: • observe state changes (BPEL execution) • process definitions are deployed and undeployed • process instances are created, terminated, suspended and resumed • process activities change their status (ready to execute, executing, completed or faulted) • but also process-related errors and exceptions while executing • and disseminate events • Clients listen to (some of) these events • Process monitors, auditing tools, BI tools Enhancing a BPEL Engine - April '06
Publishing Events as JMS Messages • Publish/Subscribe-based solution: • - it decouples consumers and producers of events/messages • - the number of participants can vary dynamically • - consumers only receive the messages of their interest Enhancing a BPEL Engine - April '06
How to Integrate Our Extensions into ActiveBPEL? • “Observe” is still pending! • Detect state changes (source code). For instance: • Processes are created with the execution of: private ProcessInstance ProcessMgr.createProcess(data); • Remote services are invoked through: private IResult InvokeHandler.invokeWS(port); • … • Many state changes to detect • Many classes involved! • Integration with existing code required! Enhancing a BPEL Engine - April '06
Hand-coded Integration (OOP) • Modify engine’s sources to reference our extensions • Many classes involved • ProcessMgr.java • InvokeHandler.java • … • errors and exceptions? • … • Difficult to maintain! • New versions of ActiveBPEL every month! • Re-implementation costs too high! Points of observation BPEL Engine (standard) + Our extensions Enhancing a BPEL Engine - April '06
(Modifying) Open-Source Software (OSS) • We do not control the evolution of ActiveBPEL!! • How to maintain our modifications across evolving releases? • Minimize re-implementation costs • Smoothly integration required! • (Our extensions can not be added to ActiveBPEL official code baseline) • ActiveBPEL is a standard BPEL engine • We implement an enhanced BPEL engine!! • OSS is a real option for academic, gov., and even industrial software projects • OSS can be modified and extended as desired • BUT • Managing OSS evolution is difficult • Re-implementation costs are high Enhancing a BPEL Engine - April '06
Aspect-Oriented Programming (AOP) • enhancedSystem = baseSystem + aspects • base system and aspects are developed independently and then woven together • Weaving process (at compile, load, or run-time) • Modify the behaviour of the base system without changing its source code ;-) • AOP is appropriate when there is an aspect (concern) of a system that *: • crosscuts the structure of several objects or operations • is beneficial to separate out • Benefits: • good modularity: • easier maintenance and evolution • easier to reason about, debug, change • more reusable * from: “Aspect Oriented Programming with AspectJ”™, the AspectJ.org team. Enhancing a BPEL Engine - April '06
Status Publication AOP-based Integration disseminate • Our functionality as aspects of the base system • There is no explicit reference to our code in the BPEL engine observe • We keep different things separated • (our concerns, and Active-BPEL development team’s concerns) Enhancing a BPEL Engine - April '06
AOP-based Integration (cont.) • Define Pointcuts (points in the engine’s execution flow to observe) • process creation pointcut processCreation call( private ProcessInstance ProcessMgr.createProcess(data) ); • Web Service (WS) invocation pointcut invokeService call( private IResult InvokeMgr.invokeWS(port) ); • Define Advices (actions to execute when pointcuts are reached) • afterprocessCreation do: disseminate(processCreatedEvent); • before invokeService do: disseminate(invokingWSEvent); Observation (glue code) Our extension Enhancing a BPEL Engine - April '06
An (AspectJ) Aspect: EventPublishing public aspect EventPublishing { ... pointcut fireEvent(IAeEngineEvent event): ( call( void IAeBusinessProcessEngine.fireEngineEvent(IAeEngineEvent)) && args(event) ) ; after (IAeEngineEvent event): fireEvent(event) { ReFFlow.disseminate(event); } ... } Observation (glue code) Our extension Enhancing a BPEL Engine - April '06
Integrating ReFFlow Extensions Detect fault Hot fix Find-bind • We defined aspects to integrate: • the find-and-bind • the evaluate mechanism • BPEL engine code is not modified! • Engine behavior is modified to react to faults Enhancing a BPEL Engine - April '06
Evolution & Maintainability • We have worked with many releases of ActiveBPEL: • No dramatic (structural) changes observed • Bug-fixes, new features • By applying AOP: • Often no changes to our work were needed • Automatic weaving! • Rarely the integration points needed to be adjusted • which is not difficult • good locality of the changes -> the aspects (pointcuts) Enhancing a BPEL Engine - April '06
Summary • We provided an implementation of the ReFFlow model • we additionally contributed with new extensions • State dissemination • we incorporated the extensions into a BPEL-compliant engine. • Instead of developing a system from scratch, we adopt an existing OSS • the resulting system has built-in support for the ReFFlow model • We combined Open-Source Software with Aspect-Oriented Programming • We applied AOP to extend an evolving open-source system • By adopting AOP, we add new behavior to the base system without modifying its source code • This approach has shown to be highly maintainable • We addressed one of the major drawbacks related to the adoption and extension of open-source software: • i.e. managing open-source software’s evolution Enhancing a BPEL Engine - April '06
Conclusions • An enhanced BPEL engine has been provided according to the requirements of the ReFFlow Project • Our extensions (developed as aspects of the base system) have been successfully applied to evolving releases of the open-source system • By applying AOP, we address one of the major challenges related to the adoption and extension of OSS (i.e. managing OSS’s evolution). • Our contributions were published in: • A. Houspanossian and M. Cilia. Extending an Open-Source BPEL Engine with Aspect-Oriented Programming. In Proc. of the Sixth Argentine Symposium on Software Engineering ASSE 2005 (JAIIO 34). Rosario, Argentina, August 2005. • D. Karastoyanova, A. Houspanossian, M. Cilia, F. Leymann, and A. Buchmann. Extending BPEL for Run Time Adaptability. In Proc. of the 9th IEEE International Enterprise Distributed Object Computing Conference (EDOC 2005). Enschede, The Netherlands, September 2005. Enhancing a BPEL Engine - April '06
Future Work • Business Activity Monitoring Tools • Stream Processing Systems • Security Aspects on Pub/Sub Systems • Scopes • Content-based Routing • XML routing • Enterprise Service Bus • event-driven SOA • the coming integration platform • Reliable, secure Web Services • Aspect-oriented Software Development • Aspect-oriented Design, supporting tools • … Enhancing a BPEL Engine - April '06
Enhancing a BPEL4WS Engine Supporting the Execution of Flexible WS-flowsAccording to the ReFFlow Model Thank you! +++ A. Houspanossian, M. Cilia {ahouspan,mcilia}@exa.unicen.edu.ar +++
References • BPEL Specification • http://ifr.sap.com/bpel4ws/ • Aspect-Oriented Software Development • http://aosd.net • AspectJ • www.aspectj.org • ActiveBPEL Engine • www.activebpel.org • The ReFFlow Project • www.dvs1.informatik.tu-darmstadt.de/research/refflow/ Enhancing a BPEL Engine - April '06