-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for Red Hat Fuse
BPEL Development Guide
Red Hat JBoss Fuse
BPEL
Red Hat
Version 6.3
Copyright © 2011-2020 Red Hat, Inc. and/or its affiliates.
26 Oct 2020
Abstract
Use this guide to help you develop integrated applications with SwitchYard.
Chapter 1. Introduction
1.1. Understanding BPEL
Business Process Execution Language (BPEL) is an XML-based language that enables task-sharing in a distributed computing environment. It uses easy-to-understand commands that perform complex functions. All the processes in BPEL, export and import information by using web service interfaces only.
The BPEL Engine is optimized for the JBoss Application Server container. It is based on Apache Orchestration Director Engine (ODE) and manages process definitions and instances.
Important
BPEL (based on the Riftsaw project) is no longer being actively developed and will be removed from a future release of JBoss Fuse. If you are currently using BPEL, it is recommended that you consider migrating to the Red Hat JBoss BPM Suite (which is supported through the JBoss Fuse Integration Package).
1.2. About Business Process Orchestration
Business process orchestration refers to the act of specifying actions within business processes via web services.
BPEL is mainly used to model web service interactions on a distributed system. It allows for complex orchestrations of multiple service applications through a single controller service.
1.3. About Apache ODE
Apache ODE ("Orchestration Director Engine") is a software component that is designed to execute BPEL business processes. It sends and receives messages to and from web services, manipulates data and performs error handling in the method prescribed in your process definition. To learn more about Apache ODE, visit the project website at http://ode.apache.org
1.4. Features of BPEL Engine
The BPEL Engine is based on Apache ODE and supports the following features:
- Provides BPEL component within the SwitchYard.
- Enterprise quality GWT based BPM console to manage process definitions and instances.
- Compiled approach to BPEL that provides detailed analysis and validation when deployed.
- Short-lived and long-running process executions.
- Process persistence and recovery.
- Process versioning.
- Runs in JBoss Cluster.
Chapter 2. BPEL and SwitchYard
2.1. Introduction
The BPEL Component is a pluggable container in SwitchYard that allows you to expose a WS-BPEL business process as a service through an interface defined using WSDL.
Important
BPEL (based on the Riftsaw project) is no longer being actively developed and will be removed from a future release of JBoss Fuse. If you are currently using BPEL, it is recommended that you consider migrating to the Red Hat JBoss BPM Suite (which is supported through the JBoss Fuse Integration Package).
2.2. Structure of a SwitchYard BPEL Application
For SwitchYard BPEL applications, the artifacts within the
src/main/resources
folder are structured differently. The switchyard.xml
configuration file is located in the META-INF folder. However, the BPEL deployment descriptor (deploy.xml
), and the BPEL process definition are located in the root folder. You can locate the WSDL interface definitions, and any accompanying XSD schemas in the sub-folders. You must ensure that the BPEL process and SwitchYard BPEL component configuration define the correct relative path for the artifacts.
Here is an example that shows the structure of the say_hello SwitchYard BPEL quickstart:
say_hello src/main/java src/main/resources META-INF switchyard.xml deploy.xml SayHello.bpel SayHelloArtifacts.wsdl JRE System Library [JavaSE-1.6] src pom.xml
2.3. Providing a Service with the BPEL Component
Procedure 2.1.
- Define your process using WS-BPEL within JBoss Developer Studio (with JBoss Integration and SOA Development tooling installed).
- Define a WSDL interface for the BPEL service.
- Define a Deployment Descriptor using the ODE Deployment Descriptor editor bundled with JBoss Tools.
- Add the component containing the implementation and service interface to the SwitchYard configuration.
2.4. Example of BPEL Component Configuration
Here is an example of the component section of the SwitchYard configuration:
<sca:component name="SayHelloService"> <bpel:implementation.bpel process="sh:SayHello"/> <sca:service name="SayHelloService"> <sca:interface.wsdl interface="SayHelloArtifacts.wsdl#wsdl.porttype(SayHello)"/> </sca:service> </sca:component>
The BPEL component contains a single
implementation.bpel
element that identifies the fully qualified name of the BPEL process. This component may also contain one or more service elements defining the WSDL port types through which the BPEL process can be accessed.
In the packaged Switchyard application, ensure that the BPEL process associated with this fully qualified name must be present within the root folder of the distribution, along with the deployment descriptor (
deploy.xml
). Here is an example of the deployment descriptor for the BPEL process referenced above:
<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" xmlns:examples="http://www.jboss.org/bpel/examples"> <process name="examples:SayHello"> <active>true</active> <retired>false</retired> <process-events generate="all"/> <provide partnerLink="client"> <service name="examples:SayHelloService" port="SayHelloPort"/> </provide> </process> </deploy>
2.5. Consuming a Service from a BPEL Process
To enable a BPEL process to invoke other services, you need to define the WSDL interface representing the service to be consumed, using an invoke element within the deployment descriptor. For example, in the
deploy.xml
file:
<process name="ls:loanApprovalProcess"> <active>true</active> <process-events generate="all"/> <provide partnerLink="customer"> <service name="ls:loanService" port="loanService_Port"/> </provide> <invoke partnerLink="assessor" usePeer2Peer="false"> <service name="ra:riskAssessor" port="riskAssessor_Port"/> </invoke> </process>
Here, the
usePeer2Peer
property informs the BPEL engine not to use internal communications for sending messages between BPEL processes that may be executing within the same engine, and instead pass messages through the SwitchYard infrastructure.
For each consumed service, you can then create a reference element within the SwitchYard configuration to locate the WSDL file and identify the port type associated with the required WSDL service or port, as shown in the
switchyard.xml
file below:
<sca:component name="loanService"> <bpel:implementation.bpel process="ls:loanApprovalProcess" /> <sca:service name="loanService"> <sca:interface.wsdl interface="loanServicePT.wsdl#wsdl.porttype(loanServicePT)"/> </sca:service> <sca:reference name="riskAssessor"> <sca:interface.wsdl interface="riskAssessmentPT.wsdl#wsdl.porttype(riskAssessmentPT)"/> </sca:reference> </sca:component>
2.6. Property Injection into a BPEL Process
You can inject properties into your BPEL process definition by using the
SwitchYardPropertyFunction.resolveProperty()
XPath custom function. The bpel:copy
section copies Greeting property value into the ReplySayHelloVar
variable in example shown below:
<bpel:copy> <bpel:from xmlns:property="java:org.switchyard.component.bpel.riftsaw.SwitchYardPropertyFunction" expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> <![CDATA[concat(property:resolveProperty('Greeting'), $ReceiveSayHelloVar.parameters/tns:input)]]> </bpel:from> <bpel:to part="parameters" variable="ReplySayHelloVar"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:result]]></bpel:query> </bpel:to> </bpel:copy>
Chapter 3. Administering Your System with BPEL Console
3.1. About the BPEL Console
The BPEL Console is a web based interface to manage, administer and debug processes deployed on a BPEL Server. It enables you to run, test and manage BPEL processes.
It allows you to view:
- any process definitions you have deployed to the BPEL engine
- the process instances executing in the BPEL engine
- a process execution history
- the query pertaining to the execution history
Important
BPEL (based on the Riftsaw project) is no longer being actively developed and will be removed from a future release of JBoss Fuse. If you are currently using BPEL, it is recommended that you consider migrating to the Red Hat JBoss BPM Suite (which is supported through the JBoss Fuse Integration Package).
3.2. Process Definition
A BPEL Process Definition is an XML file that acts as a template for a process. When deployed as a part of the SwitchYard application, you can access the BPEL process through various bindings supported by SwitchYard. For instance, as a web service via the SOAP binding or via a JMS queue.
3.3. Deploying Process Definition
The BPEL process definitions are deployed as a part of the packaged SwitchYard application. When deploying the SwitchYard application, ensure that it contains one or more BPEL process.
All the BPEL processes are displayed under the list of deployed process definitions in the console.
3.4. Manually Undeploy a Process
Procedure 3.1. task
Execute the following to safely undeploy a process:
- Launch a web browser and navigate to http://localhost:8080/bpel-console.
- Enter your user name and password.
- Click on the Runtime tab.
- Select the Deployments option. You will now be able to see the version information and current status (active or retired) of each process definition.
- Check if there is any active process consisting of any unfinished instances, retire the process.
- Undeploy the process only when there is no active process instance.
Warning
Undeploy the BPEL process only when the containing SwitchYard application is undeployed.
3.5. Active Process Instance
An active process instance is one execution of a process definition.
When you select a process definition, BPEL console displays the list of active process instances for that particular process version and definition.
3.6. View the Process Version
Procedure 3.2. task
To view the process version, execute the following:
- Launch a web browser and navigate to http://localhost:8080/bpel-console.
- Enter your user name and password.
- Click on the Managed Instances tab to see which BPEL processes are currently deployed. The process version information for each of these processes is also visible.
- Only one version of a process can be active at a time. When you open a process definition, the active version is automatically selected.
Note
BPEL console enables you to select a different version of a process.
3.7. About Business Process Analytics Format
The Business Process Analytics Format (BPAF) is designed to provide you with information about the efficiency and effectiveness of your organizational processes. It is an XML-based interchange format for all the process audit events.
3.8. View the BPAF Data
Procedure 3.3. task
You can view the Business Process Analytics Format (BPAF) data with the BPEL console. Execute the following:
- Launch a web browser and navigate to http://localhost:8080/bpel-console.
- Enter your user name and password.
- Click on the Managed Instances tab to see which BPEL processes are currently deployed. The process version information for each of these processes is also visible.
- Select a process definition to open it.
- Use the Execution History to produce a chart. Here you can specify a particular period of time to review and choose whether or not to include failed and terminated instances in the chart.
3.9. Navigating the Execution History Chart
Table 3.1. List of Shortcut Keys to Use When Navigating the Execution History Chart
Keyboard and Mouse Command
|
Result
|
---|---|
Up Arrow
|
Zoom In
|
Down Arrow
|
Zoom Out
|
Left Arrow
|
Half-Page Left
|
Right Arrow
|
Half-Page Right
|
Page-Up
|
Page Left
|
Page-Down
|
Page Right
|
TAB
|
Next Focus
|
Shift-TAB
|
Previous Focus
|
HOME
|
Max Zoom Out
|
ENTER
|
Max Zoom In to Focus
|
Mouse Drag
|
Scroll Chart
|
Shift Mouse Drag
|
Drag Select/Zoom
|
Mouse Wheel Up/Z
|
Zoom In
|
Mouse Wheel Down/X
|
Zoom Out
|
Backspace/Back Button
|
Back
|
Right Mouse-Click
|
Context Menu
|
Left-Click
|
Set Focus
|
Double-Click
|
Maximise Zoom-In-to-Focus
|
3.10. Configuring Logging Functionality
Procedure 3.4. task
Execute the following to activate the BPEL Web Console's Logging Functionality:
- Open the
deploy.xml
file in a text editor.Notedeploy.xml
file exists with every BPEL deployment unit. - Configure the
deploy.xml
file as follows:<deploy xmlns="schemas" xmlns:bpl="examples" xmlns:intf="examples/wsdl"> <process name="bpl:HelloGoodbye"> <active>true</active> <process-events generate="all"/> <provide partnerLink="helloGoodbyePartnerLink"> <service name="intf:HelloGoodbyeService" port="HelloGoodbyePort"/> </provide> </process> </deploy>
NoteAdd theprocess-events
element to generate all the events. For more information, navigate to the Apache ODE events http://ode.apache.org/ode-execution-events link. - Save the file and exit.
3.11. View the Instance Data
Procedure 3.5. task
Execute the following to view instance data with the BPEL Console:
- Launch a web browser and navigate to http://localhost:8080/bpel-console.
- Enter your user name and password.
- Under the Managed Instances tab, select the Open Button list to view the deployed process definitions. When you select any one of the process, it displays the list of process definitions and version of that particular process.
- Select a process instance to open it. You can see its details in the Execution Details panel.
- Click the Instance Data button. It displays all the details about the process.
- Click the Execution Path button. It opens the related instance execution graph.NoteThe instance execution graph is a visual representation of a running instance of a process. It tells the user about the process instance's performance over time.
- The View tab shows the instance execution graph, while the Source tab below it shows all of the "activity" events.
3.12. View a History Instance Query
Procedure 3.6. Task
- Log into the BPEL Web Console.
- Choose a process definition and a process status from the list box.You can also optionally choose to input the correlation key, the start time and the end time as search criteria.
- Go to the History Instances List and double-click on a row. A window will pop up showing you all of the execution events that happened when that process ran.
3.13. Active Process Definition
When you deploy the first version of a BPEL process definition, it automatically becomes the active definition. If this definition is subsequently changed and redeployed, then that version is "retired", and a new version becomes active automatically.
3.14. Retired Process Definition
If the active process definition is changed and redeployed, the old version is "retired". The new version automatically becomes active. The only difference between an active version and a retired one is that a retired one can no longer create new process instances. However, if there are active process instances associated with the retired process version, then these will continue to run.
3.15. Manually Retire an Active Process Definition
Procedure 3.7. Task
- Launch a web browser and go to http://localhost:8080/bpel-console.
- Input your user name and password.
- Click on the Runtime tab.
- Select the Deployments option.You will now be able to see the version information and current status (active or retired) of each process definition.
- Select the particular version of the process definition you want to retire and then press the Retire button.NoteIf you undeploy a process, its end-points will only deactivate if no previous versions of that process have ever existed.
3.16. Enable Execution Events
The BPEL Engine generates events to let you track all the activities happening within the engine and produces detailed information about all the process executions. These events exists in the database and can be examined.
Procedure 3.8. task
When you run a process, Apache ODE generates a set of events. To achieve the satisfactory performance, you can deactivate few events that are not in use. All the events may cause a non-negligeable overhead.
To enable these events, execute the following:
- Open the
deploy.xml
file in a text editor. - Add
<process-events generate="all"/>
parameter in thedeploy.xml
file.
Result
Events are successfully enabled.
Chapter 4. Configuring the BPEL Engine to Run in a Clustered Environment
4.1. About BPEL Engine in a Clustered Environment
To enable the BPEL Engine to run in a clustered environment, you need to configure all the nodes within a cluster. Ensure that all the nodes have access to the shared information concerning the persistent state of process instances.
Note
For setting up a cluster, you need to employ a load balancer to distribute the incoming SOAP requests appropriately across all of the nodes in the server.
4.2. Install the BPEL Engine in a Clustered Environment
Information Needed.
4.3. Deploying a BPEL Process in a Clustered Environment
In Fuse 6, the BPEL process is deployed as a part of a SwitchYard application. Therefore, the support for clustering is provided by SwitchYard.
Note
The
switchyard.xml
configuration file is located under the META-INF directory.
4.4. BPEL Process Service Invocation
When you invoke the BPEL service deployed in a clustered environment, make sure to specify the load balancer URL instead of SOAP address in the WSDL file. The load balancer then decides about the server, to invoke in the cluster.
Chapter 5. BPEL and REST
5.1. BPEL Console RESTful Services
5.1.1. BPEL Console RESTful Services
This is a list of Restful services that are used by the BPEL Console.
Table 5.1. BPEL Console RESTful Services
Method
|
Path
|
Description
|
Consumes
|
Produces
|
---|---|---|---|---|
Server Info (General REST server information)
|
GET
|
/gwt-console-server/rs/server/status
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs/server/resources/{project}
|
*/*
|
text/html
|
Process Management(Process related data.)
|
GET
|
/gwt-console-server/rs/process/definitions
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs/process/definition/{id}/instances
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs/process/instance/{id}/dataset
|
*/*
|
text/xml
|
-
|
POST
|
/gwt-console-server/rs/process/instance/{id}/end/{result}
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs/process/definition/{id}/image
|
*/*
|
image/*
|
-
|
GET
|
/gwt-console-server/rs/process/definition/{id}/image/{instance}
|
*/*
|
image/*
|
Process Engine(Process runtime state)
|
GET
|
/gwt-console-server/rs/engine/deployments
|
*/*
|
application/json
|
Process History(Process History Service)
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances
|
*/*
|
applications/json
|
-
|
GET
|
/gwt-console-server/rs//history/definitions
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/instance/{id}/activities
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/instance/{id}/events
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances/completed
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances/failed
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances/terminated
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances/chart/completed
|
*/*
|
application/json
|
-
|
GET
|
/gwt-console-server/rs//history/definition/{id}/instances/chart/failed
|
*/*
|
application/json
|
Chapter 6. BPEL Database
6.1. BPEL Database Schema Diagram
Following is the BPEL database schema entity relationship diagram.
Figure 6.1. BPEL Database Schema Entity Relationship Diagram
Legal Notice
Trademark Disclaimer
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Apache, ServiceMix, Camel, CXF, and ActiveMQ are trademarks of Apache Software Foundation. Any other names contained herein may be trademarks of their respective owners.