Apache ODE Integration in BPELUnit
Budddhika Chamith De Alwis
Apache ODE Integration in BPELUnit
Business Process Execution Language (BPEL) is an executable language used in web service compositions and interactions. An executable process written in BPEL can orchestrate a set of web services using information of corresponding web service interface (WSDL) definitions.
A BPEL process requires testing just as any other program written in traditional programming languages . BPELUnit is an open source testing framework fulfilling this requirement which is based on fundamentals of xUnit. It supports deployment of processes and mocking partner services to provide a realistic and flexible testing environment.
Apache ODE (Orchestration Director Engine) is a work flow engine which executes BPEL processes. Currently BPELUnit has not been integrated with ODE to provide deployment support or measuring test coverage.
The aim of this project is, therefore, the extension of the BPELUnit framework for enabling it to package and deploy instrumented process models to ODE.
- ODE deployer extension for BPELUnit in oder to deploy BPEL processes to ODE transparently.
- Functionality related to deployment of an instrumented process to the ODE in order to measure the test coverage.
- Changing the BPEL deployment to automatically direct partner endpoints to mocks.
- Complete online tutorial which shows how to unit test a BPEL process using an ODE deployment.
- Sample test case deployment bundle.
BPELUnit has been designed to be independent of execution environments from the beginning. It has has been designed to be extensible for different clients, execution engines etc. Currently it has three clients for Eclipse, Ant and the command line. Several deployment extensions also have been developed. But when testing a process with an ODE deployment, users have to deploy the process manually before starting the test. Alternatively, this can be done using an Ant task. But this can prove to be cumbersome and unnatural for iterative testing procedures specially for Eclipse users when the necessary Eclipse integration is present for other functionalities such as specifying configuration options and viewing results.
Currently in order for the process to find the simulated mock services at runtime, the unit test developer has to manually change the respective endpoints of partner service WSDLs to the simulated endpoint URLs prior to deployment. This can be done programmatically at the deployment time. This improvement will help to reduce the amount of work that the unit test developer has to do and also helps in hiding the implementation level details of simulating partner services from the developer.
Before deploying a process to a runtime in BPELUnit, a set of local (in test suite level) and global (BPELUnit installation) deployment options have to be provided. Custom deployer extensions and their configurations are specified in XML configuration files in global level for the command line and Ant clients. In Eclipse several extension points are used along with preference page options.
Measuring test coverage involves annotating process files to include invokes to a special marker service. The marker service has to be running at time of the test run. The collected markers are then used to calculate the coverage of the test run.
Following will be carried out in extending deployment and test coverage support for ODE.
- Creating an ODE deployer extension for ODE-specific deployment/undeployment. For deploying BPEL processes, the ODE deployment service can be used. Optionally, the deployment via the file system shall be provided.
- Modifying of partner service WSDL endpoints to the simulated URLs at the deployment time.
- Modifying the extension configurations for deployers (configuration files, extension points and preference page options) to provide ODE specific deployment options.
- In order to include an instrumented process for measuring the test coverage, BPEL annotation functionalities, respective descriptor modification functionalities and test coverage calculation functionalities will be developed or extracted from existing deployers wherever possible.
So far, I have made myself accustomed to both BPELUnit framework and the ODE project. I have been discussing about this project with Tammo van Lessen (Apache), Simon Moser (Eclipse BPEL Editor), and Daniel Lübke (BPELUnit) and was able to solve the questions arose in this regard so far and frame a possible and useful Google Summer of Code project.(Some of the discussions can be found here) As a result of these discussions, I plan to implement the project in four phases.
First Phase: Getting familiarized with BPELUnit framework and Apache ODE
I will use this phase to get familiarized with these projects further and to check my understanding with the mentors. This will be vital since a good understanding about the projects will be necessary to correctly implement the requirements.
Second Phase: Design formulation
Within this phase the solutions to architectural problems will be formulated. The main focus in this phase will be to bring about an architecture which will extract common test coverage functionality from the existing ActiveBPEL deployer extension, so that it will also help other developers to build their deployers with test coverage quicker through reuse. Finally, I will discuss my proposed design with my mentors.
Third phase: Implementation
After I have discussed my proposed design with my mentors and possibly other project members, I will implement the deployment logic. Besides the logic needed to deploy BPEL processes, this will also involve developing the test coverage logic. Partner service endpoint modification functionality will also be developed in this phase. Adherence to the agreed upon architecture will be a main concern in this phase. I will be consulting the ODE and BPELUnit developers regularly in this phase to make sure that I will get the necessary feedback to accomplish this.
Fourth phase: Documentation
In this phase, I will document the source code, write a tutorial, which demonstrates the usage of ODE with BPELUnit, create a small sample test suite, and will fix small bugs. The aim of this phase is to package the results of this project to be ready for use by others and to integrate the code into the official BPELUnit source tree.
My project schedule is as follows.
April 20h to May 23th
This is the community bonding period which is used to get familiarized with the projects involved. Though I am somewhat familiar with ODE and BPELUnit already I will use this period to gain more insight about these projects with the help of the respective developer communities and formulate designs to architectural issues. This period mainly concerns with the first and the second phases of my project plan.
May 23th to June 23 th
Implementing the deployment functionality of an uninstrumented process bundle. Also partner service endpoint modification functionality will be developed in this period. Any feedbacks from the community regarding this will be used for enhancements.
June 23 th to July 1st
Modifying extension configurations to include ODE deployer extension will be done during this period.
July 1 st to July 31 st
Implementing the instrumentation support for measuring the test coverage and finish documenting the sources. Proper source documentation will ensure easy maintenance. Testing the extension as a whole . This will help me to get feedbacks about any bugs and missing requirements. By the end of this period I will have completed the third phase of my project plan.
July 31 st to August 10 th
Fixing the bugs identified and reviewing the code.
August 10 th to August 17 th
Writing the tutorial on unit testing a BPEL process from ODE deployment using BPELUnit and creating a sample deployment bundle. This period will conclude the fourth phase of the project plan.
I am a third year student of Computer Science and Engineering Department of University of Moratuwa, SriLanka. I have been working with web service technologies for the last 3 months and I am familiar with Apache Axis2 and ODE projects. I was also involved in implementing an Eclipse plugin framework for simulating BPEL processes where I used runtime deployed mock services with generic Axis message receivers to return user defined XML content to the process, in order to simulate partner services. I also built the data model required for simulation by developing parsing functionalities of deployment artifacts of the process bundle and currently working on ODE runtime integration of the plugin in my free time. I also developed an XML generation tool from XML schema as a part of user input requirements of the plugin. I am familiar with related APIs and technologies such as Axiom, SAAJ, JAXB, WSDL4J etc.
Apart from web service technologies I have worked with other technologies such as JSP/Servlets, JSF, Hibernate, and Jasper reporting and have developed several applications including an e-commerce web application and gaming application. I am passionate about open source software development and hope to continue with it in the future.
During this summer I will only be having few other academic activities and a commitment such as 40 hrs a week average will be not be an issue.