Business process deployment capability is provided by the following feature in the WSO2 feature repository:
Name : WSO2 Carbon - BPEL Application Deployer Feature
Identifier: org.wso2.carbon.application.deployer.bpel.feature.group
If process management capability is not included in your product by default, you can add it by installing the above feature using the instructions given in section, Feature Management. Follow the instructions below to deploy a business process.
1. Log on to the product's management console and select "Processes -> Add" under the "Main" menu.
2. The "New BPEL Package" window opens. Provide the file and click "Upload."
3. If the deployment is successful, a dialog box appears as follows.
4. The "Deployed Processes" page opens with the newly-added process listed. For example,
- Package Name:
- Process ID:
- Version: If a package with an existing name is uploaded, the processes in the package will be versioned. All old processes in the package will be retired and new version deployed. Since there is only package-level versioning available, the new package should include all the processes defined in the old package, even though you may only need to update a single process in that package.
- Status:
- Deployed Date:
- Manage: A newly-created process has status as "Active", which can be retired by clicking on the "Retire" link. Once a process is retired, a new instance of it cannot be created.
5. Once the process is deployed in the BPS, it will be exposed as a BPEL service. Click "Services -> List" menu under the "Main" menu.
6. The "Deployed Services" window opens with the newly-deployed service listed. For example,
From here, the BPEL service can be managed just like any other Web service. For instructions, refer to section Service Management.
Note
Instead of using the management console, you can deploy a BPEL process manually by copying the zipped file to the $CARBON_HOME/repository/deployment/server/bpel directory. For instructions on preparing the process zip file, refer to section Preparing for Process Deployment.
Deployment Best Practices
The default distribution of WSO2 BPS comes with an embedded H2 database as the BPEL engine's persistence storage along with other settings suitable for development environment. However, it is recommended that some of these configurations be changed when moving to production. Configuration setting may change depending on the number of requests BPS is going to handle per second, your auditing and monitoring requirements, performance requirements and nature of your processes.
Given below are the key points to note:
1. Configure an external database server such as MySQL as the persistence storage instead of embedded H2 database. Althogh slight performance gains can be experienced when using simple BPEL processes with H2 database, it cannot handle multiple concurrent requests and complex processes with the same efficiency.
2. Configure 'multi-threaded Http connection manager' connection pool settings to suit your BPEL processes.Typically, the HTTP connection manager should be configured to be in sync with the concurrent HTTP connections in the BPS server.
There are two configurations in Http connection manager. One is 'max total connections' and other is 'max total connection per host'. These settings depend on the number of concurrent requests BPS needs to handle, and the number of external service calls per process instance. For example,
<tns:WSO2BPSxmlns:tns="http://wso2.org/bps/config"> ... <tns:MultithreadedHttpConnectionManagerConfig><tns:maxConnectionsPerHostvalue="20"/><tns:maxTotalConnectionsvalue="200"/></tns:MultithreadedHttpConnectionManagerConfig> ... </tns:WSO2BPS>
3. Configure BPEL process persistence. If a process is implemented in the request-response interaction model, use in-memory processes instead of persistence processes. This decision mainly depends on the specific business use-case.
4. Configure even-filtering at process and scope level. By reducing the number of events generated, a lot of database resources can be saved.
5. Use process-to-process communication. This reduces the overhead introduced by additional network calls, when calling one BPEL process from another deployed in the same BPS instance.
6. Configure even-filtering at process and scope level. A lot of database resources can be saved by reducing the number of events generated.
7. Configure process instance cleanup. A large number of process instance data will be accumulated in the BPEL engine's persistence storage if processes are persisted. Process instance cleanup is used to reduce performance overhead introduced by database size. The process instance cleanup feature can be configured with periodic cleanup tasks based on various process instance properties, to remove data from WSO2 BPS persistence storage.
The 'Schedules' section in bps.xml can be used to configure instance cleanup. The 'Schedules' section can contain multiple 'Schedule' elements with multiple 'cleanup' elements. In each 'Schedule' element, the attribute 'when' states the time that the instance cleanup task gets executed. Time is configured using cron expressions (http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger). Inside the cleanup element, filter elements can be used with various instance properties, which help select the instance to be deleted.
For example, the following code schedule is configured to initiate a cleanup task at 5:11 PM every day to clean completed process instances.
<tns:Schedules> <tns:Schedule when="0 11 17 * * ?"> <tns:cleanup> <tns:filter><![CDATA[status=completed]]></tns:filter> </tns:cleanup> </tns:Schedule> </tns:Schedules>
8. Take precaution when deploying WSO2 BPS in virtualized environments. Random increases in network latencies and performance degradation have been observed when running BPS on VMs.
9. One technique to reduce memory utilization of the BPS engine is process hydration and dehydration. User can configure the hydration/dehydration policy in $CARBON_HOME/repository/conf/bps.xml file or define a custom hydration/dehydration policy.
The following example enables the dehydration policy and sets the maximum deployed process count that can exist in memory at a particular time to 100. The maximum age of a process before it is dehydrated is set to 5 minutes.
<tns:ProcessDehydrationmaxCount="100"value="true"><tns:MaxAgevalue="300000"/></tns:ProcessDehydration>
- MaxAgevalue: Sets the maximum age of a process before it is dehydrated.
- ProcessDehydrationmaxCount: The maximum deployed process count that can exist in memory at a particular time.
Note
These best practices are valid for WSO2 BPS 2.1.0 onwards. Configuration details for these optimizations vary in older BPS versions. Also, these optimizations are supported by Apache ODE, but configuration is different from WSO2 BPS.