This guide provides an overview of the BPEL Service Engine, and includes details that are necessary to configure and deploy the service engine in a JBI project. The BPEL Service Engine is a JSR 208-compliant JBI runtime component that provides services for executing WS-BPEL 2.0 (or simply BPEL) compliant business processes. WS-BPEL 2.0 (Web Services Business Process Execution Language) is an XML-based language used to program business processes.
For information about creating and editing BPEL processes using the BPEL Designer, see Developer Guide to the BPEL Designer.
For more information, see the Java CAPS web site at http://goldstar.stc.com/support.
What You Need to Know
The following topics contain introductory and conceptual information for the BPEL Service Engine.
What You Need to Do
The following topics contain instructions for configuring and using the BPEL Service Engine in a Project
More Information
The following topics contain additional information about using the BPEL Service Engine
The BPEL Service Engine provides runtime services for deploying BPEL processes. The BPEL Service Engine is used to execute WS-BPEL 2.0 (or simply BPEL) compliant business processes. WS-BPEL 2.0 (Web Services Business Process Execution Language) is an XML-based language used to program business processes.
Business processes typically involve the exchange, or orchestration, of messages between the process and other web services known as partner services. The contract between a business process and partner services is described in WSDL 1.1. The message exchange between a business process and partner services is wrapped in the WSDL 1.1 message wrapper, as defined by the JBI specification, and routed via the JBI Normalized Message Router (NMR). The NMR interacts with external web services, not resident on the local JVM, via binding components. Binding components are responsible for encapsulating protocol-specific details. Transactions between the BPEL Service Engine and collocated EJBs or web components are handled through the Java EE service engine.
WS-BPEL 2.0 utilizes several XML specifications: WSDL 1.1, XML Schema 1.0, XPath 1.0, and XSLT 1.0. Note that the JBI specification is targeted toward WSDL 2.0 and accommodates WSDL 1.1 by defining the wrapper.
The BPEL Service Engine supports one-way, request-response operations (as defined in WSDL 1.1), within stateful, long-running interactions that involve two or more parties. Asynchronous request-response is accomplished using two one-way operations, one implemented by a partner, the other implemented by the business process using correlation.
The BPEL editor provides an easy-to-use interface that allows you to build or edit your BPEL Project, deploy your project to the BPEL Service Engine, and test BPEL services. The BPEL Service Engine implements most constructs; non-implemented constructs are rarely used.
The BPEL Service Engine is bundled as part of NetBeans IDE 6.1 with SOA and Project Open ESB. You can download these components from the Sun Developer Network at: http://java.sun.com/downloads/.
Following features are supported by the BPEL Service Engine:
Standard JBI 1.0 engine component
Supports BPEL 2.0, see BPEL 2.0 Language Constructs for details
Provides and consumes web services defined by using WSDL 1.1
Exchanges messages in JBI-defined XML document format for wrapped WSDL 1.1 message parts
Implements endpoint status monitoring
Supports multiple-thread execution
Supports debugging of business processes
Supports database persistence of business process instances for reliable recovery from system failure
Supports load balancing and failover when clustered
The BPEL Service Engine runtime properties can be configured from the NetBeans IDE, or from a command prompt (command line interface) during installation.
Accessing the BPEL Service Engine Runtime Properrties
To display or edit the properties in the NetBeans IDE, do the following:
From the Services tab of the NetBeans IDE, expand the Servers node.
Start your application server, for example GlassFish v2. To do this, right-click your application server and select Start from the shortcut menu.
Under the application server, expand the JBI -> Service Engines nodes and select the BPEL Service Engine. The current BPEL Service Engine properties are displayed at the right side of the NetBeans IDE. You can also double-click the BPEL Service Engine to open a properties window.
Edit the properties as needed. To apply any changes you make to the runtime BPEL Service Engine properties, stop and restart the BPEL Service Engine.
The following table include descriptions for the BPEL Service Engine runtime properties
The BPEL Service Engine requires the following artifacts to execute a business process:
BPEL Documents: define the activity sequence to execute.
WSDL Documents: define the contract between the business process and partner services.
Optional XSDs: define exchanged XML documents; XSDs can be defined inline within WSDL documents.
These artifacts are packaged into a service unit, and in turn packaged into the service assembly, along with other JBI component's service units, based on the internal/external partner services requirements.
Service assemblies and service units can be deployed to JBI runtime and corresponding components using Ant scripts provided with the NetBeans IDE. The JBI DeploymentServiceMBean interprets the deployment descriptor, jbi.xml, and deploys the service unit to the associated component.
In order to ensure the integrity of your business process data in the case of a system failure, you can configure the BPEL Service Engine to persist business process data to a database. With BPEL Persistence enabled, the BPEL Service Engine recovers otherwise lost business process data and continues processing from the point of system failure.
The BPEL Service Engine uses the JDBC resource created in the Sun Java System Application Server (GlassFish) to make the necessary database connection for persistence. NetBeans is bundled with the JavaDB database, Sun's supported distribution of the open source Apache Derby database. The BPEL Service Engine is configured to connect to the JavaDB database by default.
The BPEL Service Engine also supports connecting to an Oracle database to persist data. To create and connect to an Oracle database, see Creating a JDBC Connection Pool for Oracle and Creating a JDBC Resource for Oracle.
This section includes the following topics:
For more information on BPEL Persistence, see Using BPEL Persistence
The following procedure provides the steps for creating a JavaDB JDBC connection pool.
In your web browser, log into the Sun Java System Application Server Administrator Console. For example:
http://localhost:4848, username:admin, password: adminadmin
In the navigation tree, expand the following nodes: Resources -> JDBC.
Select Connection Pools, and in the right panel, click the New button.
Under General Settings, specify a name (such as bpelseDB).
Set the Resource Type to javax.sql.XADatasource.
Set the database vendor to Derby and click Next.
Under Connection Validation, enable Allow Non Component Callers by selecting the Enabled check box.
Under Additional Properties, specify the ServerName, User, Password and DatabaseName.
You can use the following values, or choose your own for user, password and database name (keep create=true flag).
ServerName: machine-name
DatabaseName: DatabaseName: bpelseDB;create=true
User: bpelse_user
Password: bpelse_user
Click Finish, click the connection pool name and click the Ping button.
This verifies your database connection.
Click Finish to prepare for creating a new JDBC resource.
The following procedure provides the steps for creating an Oracle JDBC connection pool. Before you create your JDBC connection for Oracle, you must create an Oracle user (with required permissions) and tablespace for BPEL Service Engine persistence.
Log into Oracle as sysdba (from SQLPlus, connect using connect sys/manager@machine-name as sysdba).
Execute the following script with default values:
Click here to download the annotated scripts.
CREATE TABLESPACE bpelsedb DATAFILE 'bpelsedb.dat' SIZE 512M REUSE AUTOEXTEND ON NEXT 2048M MAXSIZE UNLIMITED; CREATE USER bpelse_user IDENTIFIED BY bpelse_user DEFAULT TABLESPACE bpelsedb QUOTA UNLIMITED ON bpelsedb TEMPORARY TABLESPACE temp QUOTA 0M ON system; GRANT CREATE session to bpelse_user; GRANT CREATE table to bpelse_user; GRANT CREATE procedure to bpelse_user; GRANT select on sys.dba_pending_transactions to bpelse_user; GRANT select on sys.pending_trans$ to bpelse_user; GRANT select on sys.dba_2pc_pending to bpelse_user; GRANT execute on sys.dbms_system to bpelse_user; GRANT select on SYS.dba_2pc_neighbors to bpelse_user; GRANT force any transaction to bpelse_user; |
You can also connect using NetBeans IDE or a number of SQL clients by entering the username sys as sysdba. The password should be the same as that of the system user. You can also change the user, tablespace, datafile name, and size/quota according to your requirements.
In your web browser, log into the Sun Java System Application Server Administrator Console. For example:
http://localhost:4848, username:admin, password: adminadmin
Add Oracle JDBC driver classes to the application server classpath.
See the Sun Java System Application Server documentation for details on how to add the classes to the application server's classpath. One method is to navigate to Application Server > JVM Settings > Path Settings and specify the path to the jar file (including the jar file name) in the Classpath Suffix box. You must restart the application server before you continue.
In the navigation tree, expand the Resources -> JDBC nodes, and select Connection Pools.
In the right panel, click the New button.
Under General Settings, specify a name (such as bpelseDB).
Set the Resource Type to javax.sql.XADatasource.
Set the database vendor to Oracle and click Next.
Under Connection Validation, enable Allow Non Component Callers by selecting the Enabled check box.
Under Additional Properties, specify the URL, User, and Password, as follows.
You can use the following values, or choose your own for user, password and URL.
URL: jdbc:oracle:thin:@machine-name:port:sid
User: bpelse_user
Password: bpelse_use
Click Finish, click the connection pool name and click the Ping button.
This verifies your database connection.
Click Finish to prepare for creating a new JDBC resource.
The following procedure provides the steps for creating an application server database JDBC resource.
In the Sun Java System Application Server (GlassFish) navigation tree, expand the Resources -> JDBC nodes, and select JDBC Resources.
In the right panel, click the New button.
Provide a JNDIName (such as jdbc/bpelseDB) and specify the JDBC Connection Pool (bplseDB) you created previously.
You use this JNDIName when you later enable persistence in the BPEL Service Engine properties.
Expand the Configuration node and select Transaction Service.
For the On Restart parameter, enable Automatic Recovery by selecting the Enabled check box.
The following procedure provides the steps for configuring the BPEL Service Engine for persistence.
In the NetBeans IDE Services window, expand the Sun Java System Application Server (GlassFish) -> JBI -> Service Engines Nodes.
Right-click sun-bpel-engine and select Properties.
The sun-bpel-engine Properties window appears.
Set the PersistenceEnabled property value to true.
Set the JNDIName property value to specify the JNDIName of the JDBC resource that you created when you configured the database.
Click Close to save your settings.
See Configuring the BPEL Service Engine Runtime Properties for property descriptions.
Stop, shut down, and start the BPEL Service Engine to enable your new settings.
The following notes provide Drop and Truncate Scripts as well as additional information about configuring persistence. Some of the instructions mentioned here may change, so check back for updates or contact the BPEL Service Engine team if you have questions.
When the BPEL Service Engine is started, it queries the database for the existence of the tables required for persistence. If they are not there then BPEL Service Engine will create the required tables.
Drop and Truncating tables scripts for derby and oracle. Click here to download the scripts.
To drop an Oracle user, use the following script (You can download this script from here :
DROP TABLESPACE BPELSE_USER_DB INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
In order to optimize and ensure business process throughput on highly scalable systems, the BPEL Service Engine supports clustering and failover . Clustering distributes processing over multiple BPEL Service Engines via multiple BPEL service units. Failover prevents processing from being interrupted by picking up business processes from any failed systems and processing them to completion.
Clustering
When a business process needs to be scaled to meet heavier processing needs, you can distribute it across multiple service engines, running on multiple processors or systems, to increase throughput. The BPEL Service Engine's clustering algorithm automatically distributes processing across multiple engines.
For details about setting up a cluster of application servers with BPEL Service Engines, see the documentation for Sun Java System (GlassFish) Application Server.
Failover
When your business process is configured for clustering, the BPEL Service Engine's failover capabilities ensure throughput of running business process instances. When a business process instance encounters an engine failure, any suspended instances are picked up by the next available BPEL Service Engine in the cluster.
To configure failover, set the BPEL Service Engine property, EngineExpiryInterval to register itself as alive frequently enough to meet the demands of your system. Optimizing this property setting might require some testing. The default setting is 15.
In order to configure a cluster of BPEL Service Engines, you must adhere to the following guidelines.
Persistence must be enabled for both clustering and failover.
To run persistence, all BPEL Service Engines must be restarted.
Service assemblies must be deployed manually across all clustered JBI environments.
Clustering/failover is implemented consistently for the specific protocol and binding components involved in a given business process.
Only a single database can be used for all BPEL Service Engines when implementing clustering/failover.
The database must be highly available; should the database fail, clustering/failover will fail.
When a BPEL Service Engine fails, a single BPEL Service Engine picks up those instances without distributing them across the cluster. Consequently, a large number of failed over instances can overload an entire cluster, one service engine at a time, as a sort of domino effect.
All BPEL Service Engines in a cluster must reside in the same time zone.
For more information on Clustering and Failover support for the BPEL Service Engine, see Practical Guide for Testing Clustering Support for the BPEL Service Engine
BPEL BluePrints are developed to teach and promote good practices in developing business processes. Together they present solutions for developing business processes that logically combine, orchestrate, and consume web services.
The BPEL BluePrints are located at:
https://blueprints.dev.java.net/bpcatalog/ee5/soa/index.html
The following BPEL BluePrints are available for download:
BPEL BluePrint 1: Synchronous Web Service Interactions Using BPEL
BPEL BluePrint 2: Asynchronous Web Service Interactions Using BPEL
BPEL BluePrint 3: Fault Handling Using BPEL
BPEL BluePrint 4: Message-Based Coordination of Events Using BPEL
BPEL BluePrint 5: Concurrent Asynchronous Coordination of Events Using BPEL
The following table provides a list of WS-BPEL 2.0 language constructs and whether they are implemented by the BPEL Service Engine.