Skip Headers
Oracle® Application Server Release Notes and New Features
10g Release 3 (10.1.3.5.1)

Part Number E15342-03
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

5 Oracle BPEL Process Manager

This chapter describes issues associated with Oracle BPEL Process Manager. It includes the following topics:

5.1 Installation, Deinstallation, and Upgrade Issues and Workarounds

This section describes the following issues and workarounds:

5.1.1 E-mail Body Appears as an Attachment for Notification Samples Migrated from 10.1.3.4 to 10.1.3.5

If you migrate a 10.1.3.4 sample that uses e-mail attachments to 10.1.3.5, the following copy rule appears in the .bpel file. If this sample is deployed as is to Oracle BPEL Server, the e-mail body appears as an attachment only, and not as an inline message. You must manually remove this copy rule.

<copy> 
 <from expression="string('NotificationAttachment1.html')"/> 
 <to variable="varNotificationReq" part="EmailPayload" 
 query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ 
  ns1:BodyPart[2] 
 /ns1:BodyPartName"/> 
 </copy> 

5.1.2 Manually Add Notification Loggers

After applying the 10.1.3.5 patch to existing Oracle SOA Suite 10.1.3.1/10.1.3.3/10.1.3.4 installations, the log4j-config.xml file may not contain entries for notifications.

As a workaround, you must manually add the notification logger entries. For example:

<logger name="default.collaxa.bpel.services.notification" additivity="false"> 
  <level value="INFO" /> 
  <appender-ref ref="A1" /> 
  <appender-ref ref="A2" /> 
</logger>  

Where default is the domain name.

5.2 Modeling and Design-Time Issues and Workarounds

This section describes the following issues and workarounds:

5.2.1 Renaming WSDL File Service Endpoints Is Not Supported in Oracle JDeveloper

The renaming of service endpoints defined inside WSDL files in BPEL projects is not currently supported in Oracle JDeveloper. However, the Rename dialog in Oracle JDeveloper does enable you to rename a BPEL project and all artifacts (BPEL, XSD, XML, and WSDL files). In addition, all references to these artifacts are automatically updated. You access this dialog by selecting the BPEL project in the Application Navigator, then selecting Rename from the File main menu.

5.2.2 Imported WSDL and XSD Files Must Be Under the bpel Folder

When the BPEL process archive and its components are compiled and packaged into a BPEL suitcase JAR file, all XSD and WSDL files should be under the bpel folder.

If you use any imported XSD and WSDL files that are outside of the bpel folder, you must ensure that these shared files are either:

  • Placed under the bpel folder in the JAR file

  • Available on the deployed server under the bpel folder of the deployed BPEL process

Otherwise, you receive an error message similar to the following when initiating a process from Oracle BPEL Control.

"java.io.IOException: WSDLException: 
...../public_html/CommonCustomer.xsd:WSDL not found"

5.2.3 Passing Values to Security Headers

Perform the following steps to pass values to security headers.

  1. Import the schema file.

    http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0
    
  2. Create three variables based on the imported schema:

    <variable name="securityContext" element="ns2:Security"/> 
    <variable name="userNameToken" element="ns2:UsernameToken"/> 
    <variable name="pswd" element="ns2:Password"/> 
    
  3. Copy values into these newly-created variables.

  4. Insert the password after the user name (this occurs in the assign activity).

  5. Append the user name to the security context header variable (this occurs in the assign activity).

    This results in the following outcome in the assign activity.

    <assign> 
       <copy> 
          <from variable="inputVariable" part="payload" 
          query="/client:SampleRequest/client:pswd"/> 
          <to variable="pswd" query="/wsse:Password"/>   
       </copy> 
       <copy> 
          <from variable="inputVariable" part="payload" 
          query="/client:SampleRequest/client:user"/> 
          <to variable="userNameToken" 
          query="/wsse:UsernameToken/wsse:Username"/> 
       </copy>   
       <bpelx:insertAfter> 
          <bpelx:from variable="pswd" query="/wsse:Password"/> 
          <bpelx:to variable="userNameToken" 
          query="/wsse:UsernameToken/wsse:Username"/> 
       </bpelx:insertAfter> 
       <bpelx:append>   
          <bpelx:from variable="userNameToken" query="/wsse:UsernameToken"/> 
          <bpelx:to variable="securityContext" query="/wsse:Security"/>   
       </bpelx:append>   
    </assign> 
    
  6. Open the partner link activity.

  7. Click the Property tab.

  8. Click the Add button.

  9. Select wsseheaders and assign it the value of propagate.

  10. Complete design of your BPEL process.

  11. Deploy and test your BPEL process.

5.2.4 Availability of getFaultName and getFaultAsString XPath Functions in a Catch Branch

The XPath functions getFaultName and getFaultAsString are now available in a catch branch. In previous releases, these only worked in a catchAll branch.

5.3 WSIF Issues and Workarounds

This section describes the following issues and workarounds:

5.3.1 WSIF ant Tool Does Not Support WSDL Generation for EJB 3.0-Based JARs

The WSIF ant tool does not support WSDL generation for EJB 3.0-based JARs.

5.3.2 BeanDefinitionGenerator ant Task Does Not Work with Directory Paths that Include Spaces

The bean definition ant task cannot work with a directory path that includes spaces (for example, c:\Document and Settings\jsmith).

For example, assume a build.xml file includes the following entry:

<property name="beanDefinitionLocation" value="C:\Documents and 
Settings\jsmith\Desktop\EJB_test\DataBindingTestEJB\deploy" /> 

An ant task using this file fails with a message similar to the following:

cannot find file "C:\Documents"

5.3.3 WSDL Generation Failure with the Concurrentmap Collection Class

The java.util.concurrent.ConcurrentMap collection class is not a supported type in the 10.1.3 JAX RPC. As a workaround, have the method signatures use java.util.Map.

5.3.4 JDK 1.5 Enums are Not Supported by the 10.1.3 JAX RPC

JDK 1.5 enums are not supported by the 10.1.3 JAX RPC.

5.3.5 Throwable Class as a Bean Property is Not Supported by JAX-RPC

The Throwable class as a bean property is not supported by JAX RPC. For example, the following is invalid:

/** 
* Returns the cause. 
* @return Throwable 
*/ 
public Throwable getCause() 
{ 
return cause; 
} 

/** 
* Sets the cause. 
* @param cause The cause to set 
*/ 
public void setCause(Throwable cause) 
{ 
this.cause = cause; 
} 

5.4 Workflow and Worklist Issues and Workarounds

This section describes the following issues and workarounds:

5.4.1 Cannot Create a Simple Task Form By Right-Clicking the .task File

Do not right-click the .task file and select Auto Generate Simple Task Form. Doing so results in creation of an empty payload-body.jsp file. If you then right-click the project folder and select Auto Generate Simple Task Form, the same error results.

Instead, only right-click the project folder and select Auto Generate Simple Task Form to generate the form, as is documented in the Oracle BPEL Process Manager Developer's Guide.

If you receive an empty payload-body.jsp file, perform the following steps to delete the file:

  1. Right-click the human task folder.

  2. Select Delete Task Form Files.

  3. Generate the new task form.

5.4.2 Tasks Attachments Cannot Be Added from Actionable E-mails

You cannot add attachments while taking actions from actionable e-mails. For example, if you add an attachment to an actionable e-mail response message, the task does not get approved.

As a workaround, add attachments from the Oracle BPEL Worklist Application.

5.4.3 Error Notification is Not Sent when a Task is Assigned to an Invalid User and No Error Assignee is Defined

If a task is assigned to a single invalid user and no error assignee is defined for the task, then the task goes directly to the ERRORED state. In addition, no error notification is sent, even when an error state recipient has been configured in the task settings.

This issue does not occur under either of the following circumstances:

  • The error assignee is defined

  • The invalid user is not the first assignee

5.4.4 Changes to Task and Routing Customizations Require Regeneration of the Scope

Customizations to the human task scope are preserved, except when the human task scope is regenerated. The scope is regenerated when you change the selections on the following two check boxes in the Advanced tab on the human task activity.

  • Allow task and routing customization in BPEL callbacks

  • Include Task History From

5.4.5 Configuring Active Directory

For Active Directory configuration to work, you must add <property name=”nicknameAttribute” value=”sAMAccountName”/> to the <userControls> section of the $SOA_HOME/bpel/system/services/config/ldap/is_config.ActiveDirectory.xml file.

<?xml version = '1.0' encoding = 'UTF-8'?> 
<ISConfiguration 
xmlns="http://www.oracle.com/pcbpel/identityservice/isconfig" > 

<configurations> 
<!--  Active Directory EXAMPLE --> 
<configuration> 
<provider providerType="LDAP" name="Active Directory" > 
    <connection url="ldap://host:port" 
                binddn="cn=administrator,cn=Users,DC=us,DC=oracle,DC=com" 
                password="CHANGE_ME" encrypted="false"> 
                <pool initsize="2" maxsize="25" prefsize="10" timeout="60"/> 
    </connection> 

    <userControls> 
      <property name="nameattribute" value="cn"/> 
      <property name="objectclass" value="user"/> 
      <property name="nicknameAttribute" value="sAMAccountName"/>
      <search searchbase="cn=Users,DC=us,DC=oracle,DC=com" 
        maxSizeLimit="1000" maxTimeLimit="120" scope="subtree" /> 
    </userControls> 

    <roleControls> 
      <property name="nameattribute" value="cn"/> 
      <property name="objectclass" value="group"/> 
      <property name="membershipsearchscope" value="onelevel"/> 
      <property name="memberattribute" value="member"/> 
      <search searchbase="cn=Users,DC=us,DC=oracle,DC=com" 
maxSizeLimit="1000" maxTimeLimit="120"  scope="onelevel" /> 
    </roleControls> 
</provider> 
</configuration> 
</configurations> 
</ISConfiguration> 

5.5 Transformation Issues and Workarounds

This section describes the following issues and workarounds:

5.5.1 No Warning on Mapping Recursive Nodes that Exist in Source and Target Schemas

When you automap schemas with recursive nodes, there is no warning message to indicate that recursive nodes have been encountered and remain unexpanded beyond a certain level. These unexpanded nodes are not mapped.

In these situations, you must manually map the schema to the depth that you want.

5.5.2 Empty XSL Map Generated when Automapping a Recursive Schema with Restrictions

Setting the map generation type to REQ (<mapGenType type=”REQ”/>) indicates that you want all required nodes to be generated. The mapper tries to create empty required nodes for those that do not exist. If the XSD has a recursive element that is required, the document is infinite if it is generated according to the XSD.

5.5.3 XML Schema Expansion Depth is Not Obeyed When Resolving a Recursive Schema

The XML schema expansion depth is not obeyed when resolving a recursive schema. For example, perform the following steps.

  1. From the Tools main menu, select Preferences > XSL Maps.

  2. In the Expansion Depth field, enter a high value (for example, 20).

  3. In the Number of Repeating Elements field, enter 20.

  4. In the Maximum Depth field, enter 20.

  5. Attempt to map the recursive schema from source to target.

  6. Right-click the source root node and select Expand All. The schema expands until only the default level (six nodes).

  7. Close and reopen the XSL map in Design view. Only the default level appears.

  8. Restart Oracle JDeveloper. Only the default level appears.

  9. Manually expand the schema to ten levels and automap from the source to target root nodes.

  10. Right-click the map and test the schema. The source XML is not generated to 20 levels, even though the number of repeating elements was set to 20 in Step 3.

5.5.4 XSL Does Not Recognize Remote Source and Target XSD Files

If the source and target files in an XSL file are coming from a remote XSD file (for example, an XSD available on a network), the XSL does not recognize the source and target.

As a workaround, when importing a remote XSD, check the Copy to Project check box to make a local copy of the XSD file in the project.

5.5.5 Target XML Created from Mapping Choice Elements in XSD Gives Incorrect Error Message

When you generate a target XML file in the Test XSL Map dialog of the XSLT Mapper, the target XML file is correctly generated. However, the target XML file provides an incorrect error message stating that there are missing elements from a set of choice elements that are not mapped. This message can be ignored.

5.5.6 SampleExtensionFunction.jar File Must Be Copied to a Different Location

For XSL sample extension functions to work at design time, you must copy the SampleExtensionFunction.jar file to the jdev/lib/patches directory instead of to the directory mentioned in the readme file (jdev/extensions).

5.5.7 application.xml File Containins ^M Characters

The files listed below may contain extra carriage return (^M) characters:

- samples/tutorials/127.OrderBookingTutorial/OrderApproval/public_html
  /OrderApproval/form/ear/META-INF/application.xml

- samples/tutorials/127.OrderBookingTutorial/PriceQuote/SelectManufacturing/
  publ ic_html /Approval/form/ear/META-INF/application.xml

To workaround this issue you can use the dos2unix utility to remove the extra ^M characters, as follows:

> $ dos2unix <MyFile>

The dos2unix utility converts the file to UNIX format, removing any extra ^M characters, and overwrites the file to itself. Typically, the dos2unix executable is located in either the /usr/bin or /usr/local/bin directory.

5.6 Deployment and Runtime Issues and Workarounds

This section describes the following issues and workarounds:

5.6.1 Processes Are Not Loaded If the orabpel Application is Stopped and Started

Processes are not loaded if the orabpel application is stopped and started as follows:

opmnctl stopproc application=orabpel

opmnctl startproc application=orabpel

As a workaround, use opmnctl startall and opmnctl stopall. However, this means you have to stop and start all J2EE applications and Oracle Enterprise Service Bus if you want to stop and start the orabpel application.

5.6.2 Cannot Redeploy the Same BPEL Process Revision to a Production Server from Oracle JDeveloper

Redeployment of the same BPEL process revision (for example, redeploying HelloWorld revision 1.0 to revision 1.0) from Oracle JDeveloper to an Oracle BPEL Server running in production mode displays as in error in the Oracle Process Manager and Notification Server (OPMN) logs. This is the expected behavior.

However, the same deployment displays as successful in Oracle JDeveloper. This message can be ignored.

5.6.3 Quick Deployment Option Overwrites an Existing Revision if Server is Running in Development Mode

You can always deploy a BPEL process with a new revision by right-clicking the BPEL project and selecting Deploy > BPEL Process Deployer. The BPEL Process Deployer dialog that is displayed provides an option for entering a different revision value. This option is available regardless of whether Oracle BPEL Server is running in production or development mode.

However, if you select to perform a quick deployment by right-clicking the BPEL project and selecting Deploy > server_connection_name > domain_name, the process revision is overwritten and redeployed if the server is running in development mode.

5.6.4 Calculating Settings for Automatic Recovery Parameters

This section provides recommendations for setting the automatic recovery parameters to values appropriate to your environment. In any scenario, dspInvokeThreads can be set to 40. Therefore, a maximum of 40 threads are allocated to process invocation messages in the dispatcher layer. This should be sufficient and may not require changing. For example, assume a call to the external web service takes up to 120 seconds to respond and the instance creation takes about 5 seconds. Therefore, the maximum call duration (including the web service invocation) is at least 125 seconds.

If you plan for a worst-case scenario, subsequentTriggerDelay must be changed to about 150 - 200 seconds. This is a safer measure for removing an instance from being invoked and recovered more than once. The subsequentTriggerDelay property is the delay between two consecutive recovery attempts. Setting this property to a lower value does not mean that recovery is faster. If you want pending messages to be recovered without any delays, change the maxMessageRaiseSize parameter to a higher value (for example, less than or equal to 40 (dspInvokeThreads)). Therefore, at least 40 invoke instance messages can be recovered in a recovery attempt. This value can also be set to -1 to allow all pending messages to be processed during the first recovery attempt.

If you expect the rate of arrival for new messages while recovery is under way to be higher, set startupRecoveryDuration to 400 seconds. This ensures that at least two recovery attempts are made. This ensures that none of the messages are waiting to be recovered during server startup. You can decrease the startupRecoveryDuration value if a single recovery attempt itself is feasible. This removes messages waiting for some time from being recovered. This also depends upon your expectations for the number of messages to be recovered during server startup.

5.6.5 Deployment with ant Fails when Default oc4jadmin User Password Is Not Used

  1. Install Oracle SOA Suite 10.1.3.1. During installation, specify the oc4jadmin password as anything other than welcome1.

  2. Apply patch set 10.1.3.5.

  3. Attempt to deploy the prebuilt samples using ant. Deployment fails with an authentication error.

As a workaround, manually replace this password in the ant-orabpel.properties file.

5.6.6 PermGen Out-of-Memory Error During Deployment

You can receive a PermGen out-of-memory error similar to the following during deployment:

. . .
. . .
<2009-06-17 08:39:55,845> <ERROR> <default.collaxa.cube.engine.deployment> 
java.lang.OutOfMemoryError: PermGen space 
<2009-06-17 08:40:41,030> <ERROR> <default.collaxa.cube.engine.deployment> 
<DeploymentManager::deploySuitcase> 
java.lang.OutOfMemoryError: PermGen space 
<2009-06-17 08:44:20,187> <ERROR> <default.collaxa.cube.engine.agents> 
<SimpleTrigger::executionComplete> Error while rescheduling agent 
java.lang.OutOfMemoryError: PermGen space 
. . .
. . .

This error can occur under circumstances such as the following:

  • You have many components installed (for example, 10.1.3 Oracle Application Server, 10.1.3.1 Oracle BPEL Process Manager, 10.1.3.1 Oracle Enterprise Service Bus, 10.1.3.1 Oracle Web Services Manager, and the 10.1.3.5 patch set). This installation implies more class definitions, all of which reside in PermGen space.

  • Your BPEL process is quite large.

Increase PermGen space by performing the following steps:

  1. Open the $ORACLE_HOME/opmn/conf/opmn.xml file for UNIX or the ORACLE_HOME\opmn\conf\opmn.xml file for Windows.

  2. Change the PermGen value for OC4J:

    -Doc4j.formauth.redirect=true -XX:MaxPermSize=128M -Xms2048M -Xmx2048M
     -Xmn1228M 
    

    Note that when deploying a large number of processes, it is not unusual to increase the PermGen value to 256M.

5.6.7 Flow Tab of Stale Instances is Disabled

When you access a stale instance in Oracle BPEL Control, only the Audit tab is enabled. The Flow tab is disabled because it requires the process definition, which is not available for stale instances.

5.6.8 Flow Trace Is Empty When a Fault Is Not Captured

Create an instance for a BPEL process that invokes, but does not catch, a fault. Click the faulted instance in Oracle BPEL Control and note that the audit trail displays the proper payload information and activities, but the flow trace is empty.

This is the expected behavior. The flow trace requires instance data. Since the fault is not handled, the instance gets rolled back and only the audit data is saved asynchronously.

5.6.9 Recovery (Activity) Tab in Oracle BPEL Control is Disabled

The Recovery (Activity) tab that displayed in previous releases under the Administration tab in Oracle BPEL Control has been disabled. However, all main activity recovery cases are covered through other actions:

  • Receive/onMessage activities are recoverable through a callback recovery.

  • Wait/onAlarm activities are recoverable through a refresh alarm table.

The only cases that cannot be recovered are when you use bpelx:checkpoint or dspMaxRequestDepth, and these scenarios are not commonly used.

5.6.10 Optimized Assign Nodes Collapse Feature Is Not Supported in Oracle BPEL Control

The optimized assign nodes collapse feature in Oracle BPEL Control instance tracking has been removed in this release.

5.7 Documentation Errata

This section describes the following issues and workarounds:

5.7.1 Regenerating the Task Switch Activity

Section “Displaying Custom Outcomes in a Human Task Activity” of Chapter 15, “Oracle BPEL Process Manager Workflow Services” of Oracle BPEL Process Manager Developer's Guide describes how to display custom outcomes in the switch activity of a human task activity.

Regardless of whether your task outcomes are custom or predefined (such as APPROVE and REJECT), you must perform the following steps to refresh the task switch in Oracle JDeveloper.

  1. Click Source to display the source view of the BPEL process.

  2. Click Design to return to the design view of the BPEL process.

If you do not refresh, there is no loss of functionality. The correct BPEL process (with the new outcomes) is correctly deployed. Only the design view in Oracle JDeveloper does not reflect the correct task outcomes in the switch activity.

5.7.2 Searching String Flex Fields

In Table 16-2, “Contents of the Worklist Application My Tasks Page” of Chapter 16, “Worklist Application” of the Oracle BPEL Process Manager Developer's Guide, the following definition for the Search Keyword field appears:

Enter a keyword to search task titles, comments, identification keys, and the flex string fields of tasks that qualify for the specified filter criterion.

However, only the text attribute fields are searchable (textAttribute1 - textAttribute10). Other string flex fields such as formAttribute(1-5) and urlAttribute(1-5) are not searchable using the basic search keyword on the My Tasks page. These fields can be searched using the advanced search functionality.

5.7.3 Removing Samples Installed in Releases Prior to 10.1.3.5

In releases prior to 10.1.3.5, samples were installed under the SOA_HOME/bpel/samples directory.

If you are not using these samples, Oracle recommends that you remove them. For example, change directories at the command prompt to SOA_HOME/bpel/samples and enter rm -rf on Linux systems.

5.7.4 BPEL LDAP XPath Functions

There are four lightweight directory access protocol (LDAP) XPath functions in BPEL:

  • authenticate

  • listUsers

  • lookupUser

  • search

These XPath functions provide the lookup and search capabilities to obtain information from an LDAP server, typically the LDAP user information.

These XPath functions use a configuration file named directories.xml to obtain server access information for JNDI (for example, context factory, LDAP server provider URL, authenticate type, and so on). You must create and place the directories.xml file in the same directory in which the .bpel file is located.

5.7.4.1 LDAP functions in 10.1.3.x

In 10.1.3.x releases, these XPath functions are defined in the xpath-functions.xml file.

The namespace URL for the XPath functions is http://schemas.oracle.com/xpath/extension/ldap.

5.7.4.2 Configuration File

Format the directories.xml file as follows:

<?xml version="1.0" ?>
<directories>
   <directory name='people'>
     <property name="java.naming.provider.url">ldap://servername:port</property>
     <property name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory
      </property>
     <property name="java.naming.security.principal">username</property>
     <property name="java.naming.security.authentication">simple</property>
     <property name="java.naming.security.credentials">passord</property>
     <property name="entryDN">[entry dn]</property>
  </directory>
</directories>

For example:

<?xml version="1.0" ?>
<directories>
  <directory name='people'>
    <property name="java.naming.provider.url">ldap://sta0018.us.mycompany.com:7001
     </property>
    <property name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory
     </property>
    <property name="java.naming.security.principal">cn=admin</property>
    <property name="java.naming.security.credentials">weblogic</property>
    <property name="java.naming.security.authentication">simple</property>
    <property name="entryDN">ou=people,ou=myrealm,dc=soainfra</property>
  </directory>
</directories>

To call the LDAP functions, you must use directories.xml.

5.7.4.3 authenticate

This function authenticates an LDAP user and returns true or false.

Signature:

ldap:authenticate('directoryName','userId','password')

Parameters:

  • directoryName — The directory name specified in directories.xml.

  • userId — The LDAP server login user ID.

  • password — The LDAP server login password.

Return:

true or false

Example:

ldap:authenticate('people','weblogic','weblogic')

For this XPath function, you only specify two properties in the directories.xml file:

  • java.naming.provider.url

  • java.naming.factory.initial

5.7.4.4 listUsers

This function returns a list of LDAP users.

Signature:

ldap:listUsers('directoryName','filter')

Parameters:

  • directoryName — The directory name specified in directories.xml.

  • filter — The filter expression to use for the search; this value may not be null.

Return:

An XML element that contains a list of users.

For this XPath function, all properties must be specified in the directories.xml file.

Example:

ldap:listUser('people','cn=weblogic');

Example Output:

<users xmlns="http://schemas.oracle.com/bpel/ldap">
   <user dn="uid=weblogic">
      <uid>weblogic</uid>
      <userpassword>{ssha}bHDVJRfWVt/Uwlzb4TKU+QTOLB4FLySO</userpassword>
      <objectclass>inetOrgPerson</objectclass>
      <objectclass>organizationalPerson</objectclass>
      <objectclass>person</objectclass>
      <objectclass>top</objectclass>
      <objectclass>wlsUser</objectclass>
      <description>This user is the default administrator.</description>
      <wlsMemberOf>cn=Administrators,ou=groups,ou=myrealm,dc=soainfra</wlsMemberOf>
      <orclguid>8AC1B6206FDD11DEBF9A7F3D47003274</orclguid>
      <sn>weblogic</sn>
      <cn>weblogic</cn>
   </user>
</users>

5.7.4.5 lookupUser

This function returns LDAP user information.

Signature:

ldap:lookupUser('directoryName','userId','password')

Parameters:

  • directoryName — The directory name specified in directories.xml.

  • userid — The user ID to be searched.

Return:

An XML element that contains the user information.

For this XPath function, all properties must be specified in the directories.xml file.

Example:

ldap:lookupUser('people','cn=weblogic');

Example of Output:

<user dn="" xmlns="http://schemas.oracle.com/bpel/ldap">
  <ou>people</ou>
  <objectclass>organizationalUnit</objectclass>
  <objectclass>top</objectclass>
  <orclguid>8ABB9BA06FDD11DEBF9A7F3D47003274</orclguid>
</user>

5.7.4.6 search

This function returns a list of LDAP entries.

Signature:

ldap:search('directoryName','filter','scope')

Parameters:

  • directoryName — The directory name specified in directories.xml.

  • filter — The filter expression to use for the search; this may not be null.

  • scope — The scope of the search. It must be one of the following values:

    • 0 — Named object

    • 1 — One level

    • 2 — Subtree

    This parameter is optional. By default, its value is 2.

Return:

An XML element that contains the list of entries.

For this XPath function, all properties must be specified in the directories.xml file.

Example:

ldap:search('people','cn=weblogic');

Example of Output:

<searchResult xmlns="http://schemas.oracle.com/bpel/ldap">
   <searchResultEntry dn="uid=weblogic" xmlns="urn:oasis:names:tc:DSML:2:0:core">
      <attr name="uid">
         <value>weblogic</value>
      </attr>
      <attr name="userpassword">
         <value>{ssha}bHDVJRfWVt/Uwlzb4TKU+QTOLB4FLySO</value>
      </attr>
      <attr name="objectclass">
         <value>inetOrgPerson</value>
         <value>organizationalPerson</value>
         <value>person</value>
         <value>top</value>
         <value>wlsUser</value>
      </attr>
      <attr name="description">
         <value>This user is the default administrator.</value>
      </attr>
      <attr name="wlsMemberOf">
         <value>cn=Administrators,ou=groups,ou=myrealm,dc=soainfra</value>
      </attr>
      <attr name="orclguid">
         <value>8AC1B6206FDD11DEBF9A7F3D47003274</value>
      </attr>
      <attr name="sn">
         <value>weblogic</value>
      </attr>
      <attr name="cn">
         <value>weblogic</value>
      </attr>
   </searchResultEntry>
   <searchResultEntry xmlns="urn:oasis:names:tc:DSML:2:0:core"/>
</searchResult> 

5.7.5 parseXML XPath Function

The parseXML XPath function is available for use with Oracle BPEL Process Manager. This function parses a string to a DOM element.

Signature:

ora:parseXML(contentString)

Arguments:

  • contentString — The string that this function parses to a DOM element.

Property IDs:

  • namespace-uri: http://schemas.oracle.com/xpath/extension

  • namespace-prefix: ora

5.7.6 Displaying the Fields in a Simple Task Form as a List of Values

Section “Automatically Generating a Simple Task Display Form” of Chapter 15, “Oracle BPEL Process Manager Workflow Services” of the Oracle BPEL Process Manager Developer's Guide describes how when a simple task form is generated, the body of that form is created based on the task parameters. Depending of the XSD definition, the fields contained in the body form can be displayed as a list of values.

The list of values in the body form that you receive is described as follows.

When the XSD contains elements that are unbounded in cardinality, a list type of ui construct is generated. For example, if the XSD is as follows, the user interface contains multiple param rows.

<element name="payload">
  <complexType>
       <sequence>
            <element name="param" type="string" maxOccurs="unbounded"/>
       </sequence>
  </complexType>
</element> 

5.8 New Features and Bug Fixes

This section describes the following new features and bug fixes:

5.8.1 Extending Response Header Handler Functionality to Throw Faults

In previous releases, header handlers only stored information about the partner link between invocation requests. With this release, a partner link property named faultableResponseHeaderHandler is introduced that enables header handlers to throw faults. This property extends fault handlers to provide the following features:

  • Access to the response payload coming back from an invocation

  • Enables BPEL faults to be thrown back to the caller

This enables you to implement a routing filter based on the response payload, and either return or throw a BPEL fault that is captured in the process through standard means of fault handling (for example, through a catch block or a fault policy). The faultableResponseHeaderHandler property must point to the Java class that implements the interface com.collaxa.cube.ws.FaultableHeaderHandler. This class can now throw BPEL faults based on the contents of the response header. For example, set this property as follows in bpel.xml:

<partnerLinkBinding name="CallMyTestFunc"> 
<property name="wsdlLocation">CallMyTestFunc.wsdl</property> 
.... 
<propertyname="faultableResponseHeaderHandler"> 
com.collaxa.cube.ws.FaultHeaderHandlerImpl 
</property> 
</partnerLinkBinding>

5.8.2 Caching of a Partner Link Endpoint URL that Uses UDDI

You can now cache a partner link endpoint URL that uses UDDI. To use this feature, perform the following steps.

  1. Add the partnerLinkBinding property useRegistryCache to the bpel.xml file and set it to true for the partner link using the UDDI registry. For example:

    <partnerLinkBinding name="UDDIBPEL"> 
            <property name="wsdlLocation">http://host:port/ 
               orabpel/default/UDDIBPEL/1.0/UDDIBPEL?wsdl</property> 
            <property name="registryServiceKey"> 
               uddi:c6e19e10-6289-11de-9560-e4d914b0955f</property> 
            <property name="useRegistryCache">true</property> 
    </partnerLinkBinding>
    

    For partner links whose WSDL location is obtained through the UDDI registry, the WSDL location is cached after the first invocation.

  2. In Oracle BPEL Control, select Configuration > Domain.

    Set the uddiRefreshInterval property to the periodic time interval in seconds after which to refresh the UDDI cache. The default value is 86400 (one day).

    All current entries in the cache are deleted when it is refreshed.

5.8.3 Binding a Fault Policy to a Process Name

In releases prior to 10.1.3.5, you bound a fault policy to a partner link or portType. Starting with this release, you can also bind a fault policy to a process name. This enables all fault policy features to apply at the process level.

The following example defines a policy in the fault-bindings.xml file.

<process faultPolicy="TerminatePolicy"> 
            <name>LoanFlow</name> 
        </process> 
        <process faultPolicy="RetryPolicy"> 
            <name>AutoLoanFlow</name> 
        </process> 
        <!--this is default policy for all processess --> 
        <process faultPolicy="RethrowPolicy"/> 
        <!--partnerlink policy --> 
        <partnerLink faultPolicy="RetryPolicy"> 
            <name>creditRatingService</name> 
        </partnerLink> 

You can define fault policies for each process (for example, LoanFlow, AutoLoanFlow, and so on) and a default policy for all other processes. A partner link always takes the highest precedence, followed by process name policies. In the preceding sample code, the order of precedence is as follows:

  1. The creditRatingService partner link policy is applied first.

  2. If a policy is not defined for that particular partner link, the process name policy takes effect (LoanFlow and AutoLoanFlow in the preceding sample).

  3. If a policy is not defined for specific processes, then the default process name policy (RethrowPolicy in the preceding sample) takes effect.

In the fault-bindings.xml file, you must define the policy in the following order.

  • Process name policies

  • Default process policies

  • Partner link policies

For more information about fault policies, see the Oracle BPEL Process Manager 10.1.3.4 release notes, available on the Oracle Technology Network:

http://www.oracle.com/technology/documentation/appserver10131.html 

5.8.4 Debugging BPEL Processes and Instances from Oracle BPEL Control

You can debug BPEL processes and instances from Oracle BPEL Control with the BPEL debugger. The BPEL debugger enables you to perform the following tasks.

  • Set and clear breakpoints at the BPEL process level.

  • Specify how many newly-created process instances to trap at the process level.

  • Set and clear breakpoints on a specific instance of a BPEL process. Breakpoints defined at the instance level enable you to debug the instance until completion. You can perform additional instance debugging actions such as the following:

    • View and edit variables.

    • View the audit trail.

    • Perform step operations by resuming instance execution one activity at a time.

    • Perform resume operations by resuming instance execution one structured activity at a time.

    • Clear all breakpoints and run an instance to completion.

5.8.4.1 Enabling Debugging for a Specific Domain

The BPEL debugger is available in preview mode only for release 10.1.3.5. For information on how to enable the BPEL debugger, contact Oracle Support Services.

After enabling the BPEL debugger, perform the following steps:

  1. Log in to Oracle BPEL Control.

  2. Select the Configuration tab.

    A Debug subtab now appears under both the Instances tab and the Processes tab in Oracle BPEL Control.

5.8.4.2 Process Level Debugging

You can perform the following debugging tasks at the process level:

  • View a process map for a BPEL process.

  • Set and clear process breakpoints on selected BPEL activities.

    When a breakpoint is reached, execution pauses and waits for you to perform debugging actions.

  • Define traps on a process.

    A process trap allows control on BPEL process instances that are trapped for debugging. The process trap supports both unconditional and conditional traps with a count. You specify the number of process instances to trap for debugging. By default, the process trap is disabled for a process.

The debug state for all processes (including process traps and breakpoints) is persisted to the dehydration store. Similarly, when a domain is initialized during Oracle BPEL Server startup, the BPEL debugger loads the debug state for all processes in the domain from the dehydration store.

Note:

You do not need to recompile and redeploy BPEL processes following the upgrade to release 10.1.3.5 in order to use the BPEL debugger.
  1. Log in to Oracle BPEL Control.

  2. Click the Processes tab.

  3. In the BPEL Process column, click a specific deployed process. You can only debug processes that have a life cycle setting of Active and a state setting of On.

  4. Click the Debug subtab.

  5. Select BPEL activities on which to set breakpoints. You can select multiple activities by pressing the Ctrl key and making additional selections.

  6. In the Debugger control panel on the right side, click the Set Breakpoint icon (second icon) to set breakpoints on activities.

    Description of bpel_setbp.gif follows
    Description of the illustration bpel_setbp.gif

    The selected breakpoints display in the Breakpoints section of the Debugger control panel. All breakpoints defined at the process level are copied to each of the instances of the process for debugging at the time of instance creation. At the instance level, you can perform debug actions (step, resume, update variable values, and so on) that only impact that specific instance.

    Description of bpel_setbp2.gif follows
    Description of the illustration bpel_setbp2.gif

  7. Remove a breakpoint by selecting it in the Breakpoints section and clicking the Clear Breakpoint icon (third icon).

  8. In the Debugger control panel, click the Set Trap Count icon (first icon) to set a trap count value.

    Description of bpel_setbp6.gif follows
    Description of the illustration bpel_setbp6.gif

    A dialog for entering a process trap value is displayed. If you want to trap all further process instances, then enter a value of -1, which shows the trap count as ALL. A trap count value of 0 implies that the trap is disabled.

  9. Enter a value for the number of newly-created process instances to trap, and click OK.

    The process instance trap value displays in the Trap Count section and Breakpoints section of the Debugger control panel.

    Description of bpel_setbp3.gif follows
    Description of the illustration bpel_setbp3.gif

  10. Remove a breakpoint by selecting it in the Breakpoints section and clicking the Clear Breakpoint icon (third icon).

  11. Click the Refresh Process Debug State icon (fourth icon) to refresh the debugger state. For addition information about this icon, see the description for the Refresh Instance Debug State icon in the table.

  12. Click the ? icon (fifth icon) to display online Help for the tasks that you can perform on this page.

5.8.4.3 Instance Level Debugging

You can perform the following debugging tasks at the instance level:

  • Debug open BPEL instances paused on an initial breakpoint (defined at process level).

  • Bring up a dehydrated instance and debug it (set a breakpoint on an activity past the dehydration point and wait for the instance to hit the breakpoint).

  • Debug only one instance at a time.

When a process instance hits a breakpoint, the process map for the instance appears in the Debug tab, identifying the activity at which instance execution has paused. If there are multiple instances paused in debug state, you can selectively load specific instances and debug them.

BPEL instances on creation inherit the breakpoints defined at the corresponding process level. Post creation, instance breakpoints are independent of process breakpoints. Debug operations such as set and clear breakpoints on an instance do not impact the breakpoints defined at the process level, and vice versa.

When an instance is dehydrated, the debug state for the instance is persisted to the dehydration store. Similarly, when an instance is rehydrated, the instance debug state is also restored to enable you to continue debugging operations on the instance.

  1. Log in to Oracle BPEL Control.

  2. Click the Instances tab.

  3. In the Instance column, click one or more specific instances. When debugging is enabled, debuggable instances are identified by a red stop sign icon. You can select one or more debuggable instances and click the Resume button to perform a bulk resume operation. Instance level debugging is only permitted for BPEL instances in a state of open.running.

  4. Click the Debug subtab.

    A process map for the BPEL instance is displayed.

    The process map visually identifies BPEL activities that have a breakpoint or a current position. A current position is defined as an activity where execution is paused (immediately prior to the activity). Therefore, the initial current position gets defined when an instance hits the first breakpoint postinitiation. The breakpoint associated with a current position can be explicit (a user-defined breakpoint) or implicit (internal breakpoint; for example, when you perform a single-step operation and the following activity does not have a user breakpoint).

    An activity that has a user breakpoint may not be executed and therefore may not become a current position. This occurs when the instance being executed takes a different execution path that does not encounter the activity. Therefore, it may not encounter the breakpoint.

    Description of bpel_setbp4.gif follows
    Description of the illustration bpel_setbp4.gif

  5. Right-click an activity to display a list of debug operations permissible on the activity. Note that many of these operations are context sensitive and display only when relevant.

    • View Source

      Displays the BPEL source code.

    • Set Breakpoint

      Sets a breakpoint on this activity. Only one of the Set Breakpoint or Clear Breakpoint options appears on any activity as a right-click option.

    • Clear Breakpoint

      Clears a breakpoint on this activity.

    • Forced Completion

      When an instance being debugged shows one or more asynchronous activities as being performed, you can force completion or skip the being performed activity. Execution then continues with the next activity.

      Activities identified as being performed are different from current position activities. BPEL activities such as a receive, OnAlarm branch of a pick, and wait complete asynchronously. For example, a midprocess receive activity completes when it receives a message from the associated partner link. Similarly, a wait activity completes when the timer associated with the activity expires.

      Only such asynchronous activities that have been initiated, but which are waiting on some event for completion, are marked as being performed. You can skip or force completion on such activities if you do not want to wait for the activity to complete normally.

    • Select Current Position

      If there is more than one current position, you can switch the selected one to another. This operation is only enabled when a BPEL instance is in debug mode with more than one current position. This option only appears for selection when there is more than one current position for the instance, and the selected activity is one of them, but not the selected current position.

    • Single Step

      Performs the next operation. This option displays when right-clicking a current position activity.

    • Step Block

      Performs the next structured activity. This option displays when right-clicking a current position activity that is a structured BPEL activity.

    • Resume

      Resumes execution until the next breakpoint. This option displays when right-clicking a current position activity.

    • Clear All and Run

      Resumes execution after removing all breakpoints. This option displays when right-clicking a current position activity.

  6. View the list of breakpoints in the Breakpoints section of the Debugger control panel on the right side. BPEL instance execution pauses before a BPEL activity that has an active breakpoint.

    Icons at the top provide access to debugging tasks.

    Description of bpel_setbp7.gif follows
    Description of the illustration bpel_setbp7.gif

    The icons that display left to right are described in the following table.

    Icon Icon Name Description
    1 Show and Follow Audit Trail Displays the audit trail associated with the instance being debugged.

    When you debug an instance, the audit trail for the instance shows debugger actions and interventions. Specifically, the following debugger actions are displayed in the audit trail:

    • When an instance hits a breakpoint

    • When an instance is resumed past a breakpoint

    • When an instance variable is edited

    • When an activity is force-completed

    2 Set Breakpoint Sets a breakpoint on an instance.
    3 Clear Breakpoint Clears a breakpoint on an instance.
    4 Step Performs the next operation.

    You can resume execution of the instance one activity at a time by performing a single-step operation. Upon resumption, the instance completes the current activity, encounters an implicitly set breakpoint on the following activity, and pauses execution.

    As with the resume operation, a single-step operation must (implicitly or explicitly) identify a specific BPEL activity at which execution must be resumed. A single-step operation is permitted only on an activity that has a current position on it.

    5 Step Block Performs the next structured activity.

    When execution has paused at a BPEL structured activity, you can perform a step-block operation on it. The step-block operation resumes execution from the identified structured activity that has a current position on it, encounters an implicitly set breakpoint on the activity following the structured activity, and pauses execution.

    A step-block operation must (implicitly or explicitly) identify a BPEL activity at which execution must be resumed. A step-block operation is permitted only on a structured BPEL activity that has a current position on it.

    6 Resume Resumes execution until the next breakpoint.

    You can resume execution of the instance by doing a resume operation. Upon resumption, the instance execution proceeds until it encounters another breakpoint or runs its normal course to completion.

    A resume operation must (implicitly or explicitly) identify a specific BPEL activity at which execution must be resumed. A resume operation is permitted only on an activity that has a current position on it.

    7 Clear All Breakpoints and Run Resumes execution after removing all breakpoints.

    When a BPEL instance is in debug mode, you can clear all breakpoints and resume execution of the instance. Upon resumption, all breakpoints on the instance are cleared and the instance execution runs its normal course to completion.This option is only permitted when there is at least one BPEL activity that has a current position on it.

    8 Refresh Instance Debug State Refreshes the debugger state.

    When the BPEL instance being debugged is open, running, and not in debug mode (that is, it has not encountered any breakpoints), the Debugger control panel indicates that the instance is freely running and has not encountered any breakpoint. You can perform this operation to do the following:

    • Force a refresh of the instance debug state and update the debug state of the instance from the server

    • Check if the instance has hit any breakpoints

    This operation is also supported on the Debug subtab of the Processes tab to refresh breakpoints defined at the process level.

    9 Help Displays online Help for the tasks that you can perform on this page.

  7. Select options appropriate to your environment.

    The Debugger control panel displays the list of BPEL variables for the instance. You can view and edit BPEL process variables associated with the instance when execution is paused at a breakpoint.

  8. Click the variable name in the list to display its contents.

    Description of bpel_setbp5.gif follows
    Description of the illustration bpel_setbp5.gif

  9. Edit the contents of the selected variable:

    • Click the first icon above the variable content to create an XML skeleton of the variable or to create its content in the editor. This enables you to initialize a variable with an empty skeleton based on its XML schema type.

    • Click the second icon above the variable content to save that variable to the process instance.

    If you do not click Save after you edit the variable contents, the changes are discarded. The BPEL Debugger enforces XML schema validation for the updated variable content.

5.8.5 How to Enable BPEL Notifications

You can send e-mail notifications to a configured user when the following events occur:

  • Oracle BPEL Server is started or shut down.

  • A process's state changes from on to off and the life cycle changes from active to retired.

  • The state of an instance changes to one of the following:

    • Started (open.running)

    • Completed (closed.completed)

    • Faulted (closed.faulted)

    • Cancelled (closed.cancelled)

  • The automatic recovery agent fails to recover the instance.

  • An invoke message, callback message, or activity moves to the recovery phase.

Note:

E-mail is the only supported channel for sending event notifications.

5.8.5.1 Notification Event Types and Notification Variables

Table 5-1 shows the notification event types you can configure through use of predefined templates in Oracle BPEL Control.

Table 5-1 Event Types for Notifications

Event Type Event Name Event Description

Oracle BPEL Server

  • engine.start

  • engine.shutdown

  • engine.all

  • Server startup

  • Server shutdown

  • All server events

Process

  • process.lifecycleChange

  • process.stateChange

  • process.all

  • Process lifecycle change

  • Process state change

  • All process events

Instance

  • instance.start

  • instance.complete

  • instance.cancel

  • instance.fault

  • instance.recoverInvoke

  • instance.recoverCallback

  • instance.recoverActivity

  • instance.all

  • Started instance

  • Completed instance

  • Cancelled Instance

  • Faulted instance

  • Recover invoke messages

  • Recover callback messages

  • Recover activities

  • All instance events

Recovery

  • recovery.invokeFailure

  • recovery.callbackFailure

  • recovery.activityFailure

  • recovery.all

  • Automatic invoke recovery failure

  • Automatic callback recovery failure

  • Automatic activity recovery failure

  • All recovery events


As you create the notification message content in the templates, there are specific predefined variables to use in the message subject and body. These variables are replaced with actual values at runtime. Table 5-2 provides details.

Table 5-2 Predefined Notification Variable Templates

Type Variable Name Velocity Representation

Environment variables (environment)

  • serverHost

  • serverInstance

  • domainName

  • domainNameLink

  • $env.serverHost

  • $env.serverInstance

  • $env.domainName

  • $env.domainNameLink

Engine notification variables (engine)

  • serverStatus

  • eventTime

  • $engine.serverStatus

  • $engine.eventTime

Process notification variables (process)

  • processName

  • processNameLink

  • processRevision

  • processStatus

  • prevStatus

  • currentState

  • eventTime

  • $process.processName

  • $process.processNameLink

  • $process.processRevision

  • $process.Status

  • $process.prevStatus

  • $process.currentState

  • $process.eventTime

Instance notification variables (instance)

  • processName

  • processNameLink

  • processRevision

  • instanceId

  • instanceIdLink

  • conversationId

  • status

  • eventTime

  • messageType

  • activityLabel

  • receiveDate

  • $instance.processName

  • $instance.processNameLink

  • $instance.processRevision

  • $instance.instanceId

  • $instance.instanceIdLink

  • $instance.conversationId

  • $instance.status

  • $instance.eventTime

  • $instance.messageType

  • $instance.activityLabel

  • $instance.receiveDate

Automatic recovery agent variables (recovery)

  • processName

  • processNameLink

  • processRevision

  • instanceId

  • instanceIdLink

  • activityLabel

  • scopeLabel

  • conversationId

  • receiveDate

  • eventTime

  • status

  • errorCode

  • exceptionMessage

  • recoveryType

  • $recovery.processName

  • $recovery.processNameLink

  • $recovery.processRevision

  • $recovery.instanceId

  • $recovery.instanceIdLink

  • $recovery.activityLabel

  • $recovery.scopeLabel

  • $recovery.conversationId

  • $recovery.receiveDate

  • $recovery.eventTime

  • $recovery.status

  • $recovery.errorCode

  • $recovery.exceptionMessage

  • $recovery.recoveryType


The XSD file (bpel_notification.xsd) is located in SOA_Home/bpel/system/xmllib.

5.8.5.2 Prerequisite: Downloading the Velocity JAR File

The e-mails generated for notifications are as per the templates configured. These templates contain predefined variables that are replaced with the actual values at runtime. To follow a standard and provide an easier format for these variables, velocity templates are used with the BPEL notification feature. Therefore, the velocity-dep-1.5.jar file is required for the notification feature to work.

The velocity-dep-1.5.jar file is not shipped with Oracle SOA Suite. Therefore, the BPEL notification feature is disabled by default. To enable the BPEL notification feature, you must explicitly download this JAR file after accepting the Apache license agreement.

Perform the following steps to download the velocity-dep-1.5.jar file.

  1. Access the following URL:

    http://archive.apache.org/dist/velocity/engine/1.5/
    
  2. Download velocity-dep-1.5.jar.

  3. Accept the Apache licensing agreement to use the BPEL notification feature.

  4. Place the JAR file in $Oracle_Home/bpel/lib for UNIX or Oracle_Home\bpel\lib for Windows.

  5. Restart Oracle BPEL Server.

    This enables the BPEL notification feature to display in Oracle BPEL Control.

5.8.5.3 Creating BPEL Notifications

  1. Log in to Oracle BPEL Control.

  2. Click the Configuration tab.

  3. Click the Notifications tab.

    The upper part of the page enables you to perform the following tasks:

    • Select the event types and templates to enable or disable. An event type can be configured to have two or more templates. However, an event type cannot have the same template twice.

    • Specify notification recipients. If you specify multiple recipients, separate each recipient with a comma.

    Description of bpel_notif1.gif follows
    Description of the illustration bpel_notif1.gif

  4. Click Apply to apply any changes.

  5. Scroll down to the lower part of the page.

    The lower part of the page enables you to perform the following tasks:

    • Select a template to use in the Current Templates section. This action causes the template to display in the Template Details section. All velocity template variables are automatically replaced with the actual values from BPEL runtime by the notification service. These values are sent as e-mail content. You do not need to enter any values in these templates.

    • Click the Add or Delete icon to add or delete a template.

    Description of bpel_notif2.gif follows
    Description of the illustration bpel_notif2.gif

  6. Click the online Help link Predefined template variables for descriptions of variables and examples of values.

  7. Click Apply when complete.

  8. Click the Configuration tab.

  9. Scroll down and configure the SMTP server with values appropriate to your environment.

    Description of bpel_notif3.gif follows
    Description of the illustration bpel_notif3.gif

  10. Click Apply when complete.

    The notification feature uses in-memory storage to collect the messages between two processing cycles (5 minutes by default) and process them periodically. The maximum number of notification messages to process is configured with the property notificationStoreMaxMessagesSize on this page. The default value is 150. In a high volume environment, a larger number of notification messages must be collected and processed. In this scenario, you must increase the value for this property to avoid messages not being collected and processed. If the default value of 150 is exceeded, the following null pointer exception may appear in the logs, which causes the BPEL notification service to become disabled.

    <NotificationAgent::execute>  Domain :default NotificationJob: Number of 
    notification messages to be processed : 150 
    <NotificationAgent::processNotification>  Domain :default, Processing 
    @ instance.complete notification  for channel: email 
     Unable to handle email notifications for the domain default 
    java.lang.NullPointerException 
            at 
    com.collaxa.bpel.services.notification.channel.ChannelHandler.constructMessage 
    . . .
    . . .
    

    If this occurs, perform either of the following workarounds:

    1. Go to Configuration > Notification in Oracle BPEL Control.

    2. Disable notifications, and click Apply.

    3. Enable notifications, and click Apply.

    or

    1. Restart Oracle BPEL Server.

5.8.5.4 Consolidated Notifications

Notification events are triggered whenever a significant change occurs in BPEL instances, dispatcher messages, BPEL processes, and so on. These accumulated events are processed periodically (five minutes by default) and e-mails are dispatched one per notification event type. During this execution, a set of identical notification messages collected between any two notification periodic cycles are processed and sent as a single mail. For example, in a domain, the set of BPEL instances that faulted is consolidated and sent as a single e-mail.

5.8.5.5 Periodic Processing of Notifications

Processing of notification messages is performed periodically. The default duration is 5 minutes. You can change this value to reflect the requirements of your environment. Perform the following steps to change this property.

  1. Open the SOA_HOME\bpel\domains\domain_name\config\domain.xml file for the domain in which to change this property.

  2. Manually add the notificationScheduleDuration property and set it to an appropriate integer value.

    <property id="notificationScheduleDuration">
      <name>Notification schedule duration property</name>
      <value>5</value>
      <comment/>
    </property>
    
  3. Save and close the file.

  4. Restart Oracle BPEL Server.

    The property now displays under Configuration > Domain in Oracle BPEL Control. Subsequent changes to this value do not require a restart of Oracle BPEL Server.

5.8.5.6 Event Notification Samples

This section provides samples of event notification messages.

Example 5-1 provides an example of message content sent during an engine (Oracle BPEL Server) notification.

Example 5-1 Engine (Oracle BPEL Server) Notification Message Content

E-mail Subject Engine Notification: Started

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests
       
              Server status    : Stopped
              Timestamp        : Wed April 08 00:42:23 PDT 2009

Example 5-2 provides an example of message content sent during a process notification. Note that in this example, notifications with similar content can be combined into a single notification.

Example 5-2 Process Notification Message Content

E-mail Subject Process Notification: Retired

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests

              Process name     : SyncEmbedProcess
              Revision tag     : 1.0
              Process Status   : Retired
              Timestamp        : Wed April 08 10:42:23 PDT 2009

              Process name     : SyncXPathProcess
              Revision tag     : 1.0
              Process Status   : Retired
              Timestamp        : Wed April 08 05:12:24 PDT 2009

Example 5-3 provides an example of message content sent during an instance notification.

Example 5-3 Instance Notification Message Content

E-mail Subject Instance Notification: Faulted

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests

              Process name     : SyncEmbedProcess
              Revision tag     : 1.0
              Instance ID      : Retired
              Conversation ID  : bpel://localhost/tests/Tests-1.0/6567403-BpSeq1.3
              Instance status  : Faulted
              Timestamp        : Wed April 08 04:22:29 PDT 2009

Example 5-4 provides an example of message content sent during a recovery notification. Note that in this example, notifications with similar content can be combined into a single notification.

Example 5-4 Recovery Notification Message Content

E-mail Subject Attempted Invoke messages recovery and faulted

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests

              Process name     : SyncEmbedProcess
              Revision tag     : N/A
              Instance ID      : N/A
              Activity name    : 
              Conversation ID  : bpel://localhost/tests/Tests-1.0/6567402-BpSeq1.3
              Receive date     : 03/11/09 06:37:51 AM
              Recovery status  : Pending recovery
              Timestamp        : Wed April 08 01:26:34 PDT 2009
              Error code       : ORABPEL-92181
              Exception        : Fauled due to unhandled BPEL fault

              Process name     : SyncJavaEmbed
              Revision tag     : N/A
              Instance ID      : N/A
              Activity name    : 
              Conversation ID  : bpel://localhost/tests/Tests-1.0/6567434-BpSeq1.3
              Receive date     : 03/11/09 06:37:51 AM
              Recovery status  : Pending recovery
              Timestamp        : Wed April 08 07:21:03 PDT 2009
              Error code       : ORABPEL-92181
              Exception        : Fauled due to unhandled BPEL fault

Example 5-5 provides an example of message content sent during an instance recovery notification. This notification is triggered when a message or activity moves to recovery.

Example 5-5 Instance Recovery Notification Message Content

E-mail Subject Invoke message fail and move to recovery

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests

              Process name     : SyncJavaEmbed
              Revision tag     : 1.0
              Instance ID      : N/A
              Activity name    : N/A
              Conversation ID  : bpel://localhost/tests/Tests-1.0/6567433-BpSeq1.3
              Receive date     : 03/11/09 06:37:51 AM
              Timestamp        : Wed April 08 12:00:23 PDT 2009

Example 5-6 provides an example of message content sent during an instance recovery notification. This notification is triggered when a message or activity moves to recovery.

Example 5-6 Instance Recovery Notification Message Content

E-mail Subject Callback messages fail and move to recovery

Email Content Server host      : myhost.us.oracle.com:9999
              Server instance  : oc4j_soa
              Domain name      : tests

              Process name     : SyncJavaEmbed
              Revision tag     : 1.0
              Instance ID      : N/A
              Activity name    : N/A
              Conversation ID  : bpel://localhost/tests/Tests-1.0/6567913-BpSeq1.3
              Receive date     : 03/11/09 04:33:51 AM
              Timestamp        : Wed April 08 09:42:03 PDT 2009

5.8.6 Disabling the OK and Apply Buttons While Loading Remote XSD Files

In releases prior to 10.1.3.5, the OK and Apply buttons of the Transform dialog remained enabled while Oracle JDeveloper loaded a remote XSD file (for example, a file containing type declarations for use by variables of a BPEL process). If you did not realize that Oracle JDeveloper was still loading the file, and clicked OK or Apply, part of the message variable was not correctly set, which caused the transform activity to become corrupted. user name

Starting with this release, when loading XSD files, the OK and Apply buttons remain disabled until Oracle JDeveloper has completed loading the files.

5.8.7 Specifying a Newly Deployed Process as the Default Revision

In releases prior to 10.1.3.5, when you deployed a BPEL process and wanted to make it the default revision (that is, identified with an asterisk in Oracle BPEL Control), you had to set it manually.

With this release, bpelc includes the defaultRevision parameter. Setting this parameter to true causes the process revision being deployed to be set as the default revision.

For example, perform the following steps:

  1. Add the configuration property processDeployAsDefault=false in the domain.xml file.

  2. Restart Oracle BPEL Server.

  3. Deploy the process for SOA_HOME/bpel/samples/tutorials/101.HelloWorld by entering the following command:

    ant -Drev 1.0 
    

    This process becomes the default revision.

  4. Enter the following command:

    ant -Drev 2.0
    

    Revision 1.0 remains the default revision.

  5. Enter the following command:

    ant -Drev 3.0 -DdefaultRevision true 
    

    Revision 3.0 becomes the default revision.

5.8.8 Interoperability Support Between Oracle SOA Suites 10.1.3.5 and 11g

The following interoperability scenarios are supported:

  • An Oracle SOA Suite 11g service asynchronously calling an Oracle SOA Suite 10.1.3.5 service.

  • An Oracle SOA Suite 10.1.3.5 service asynchronously calling an Oracle SOA Suite 11g service.

5.8.9 Detecting Infinitely Recursive Schemas

In releases prior to 10.1.3.5, if an XSD schema was recursive (for example, order > customer > order repeating in the XSD where order and customer were both required nodes), transformation problems occurred. This was because this type of recursion was infinite, and no valid document could be created. The XML code generator for the XSLT Mapper test tool ran infinitely through these recursive nodes and eventually ran out of memory.

In this release, XML generation detects the required recursion and stops at the first repetition. Since no valid XML document can be created for the XSD as it is defined, an error displays in the XML editor indicating the problem. You can then choose to ignore the error and continue or you can modify the XSD.

5.8.10 Transformation Updates Correctly Reflected at Runtime

In releases prior to 10.1.3.5, if you designed, deployed, and created an instance of a BPEL process that included a transformation mapping, then returned to the BPEL process, preformed additional transformation mapping, redeployed the process, and recreated the instance, the additional mapping was not reflected in the instance at runtime.

In this release, the additional mapping is correctly reflected in the instance at runtime.

5.8.11 Using ant to Generate a WSDL from an EJB

A new ant-based tool is provided for generating a WSDL file with WSIF-EJB bindings and XML/Java object mapping metadata. A new data binding runtime is also provided for performing Java - XML conversions based on the mapping metadata currently generated by the design tool. The current WSIF-EJB provider is enhanced to incorporate the new data binding runtime along with any changes required to operate with the Web Services Assembler (WSA)-generated artifacts.

This section describes how to generate the WSDL with WSIF-EJB bindings and related artifacts required for invoking the EJB from BPEL. Specifically, this section describes how to perform the following steps:

  • Create two XML files (wsif-ejb-tool.xml and build.xml) for use with ant.

  • Run the GenerateBeanDefinition ant target to generate intermediate type definition files.

  • Replace the XXXXX values shown in the code samples below with valid values in the type definition file.

  • Run the GenerateWSDL ant target to generate the WSDL file.

    Note:

    When creating ant scripts for bean definitions and WSDL file generation, ensure that you use the correct path separators for Linux (: and /) and Windows operating systems (; and \).

    See Also:

    Section 5.3, "WSIF Issues and Workarounds" for issues and workarounds related to WSIF and ant

5.8.11.1 Prerequisites

  1. Create a new file named wsif-ejb-tool.xml in the SOA_HOME\bpel\system directory.

  2. Copy and paste the following XML content into the file. This XML file sets up the class path variable.

    <?xml version="1.0"?>
    <project name="wsif-ejb-binding" default="" basedir=".">
        <property name="classpath"
    value=".\..\lib\xmlparserv2.jar;.\..\..\webservices\lib\saaj-api.jar;.\..\..\
    webservices\lib\wsa.jar;.\..\..\webservices\lib\wsclient.jar;.\..\..\webservice
    s\lib\wsserver.jar;.\..\..\webservices\lib\jaxrpc-api.jar;.\..\..\webservices\
    lib\orasaaj.jar;.\..\..\webservices\lib\orawsdl.jar;.\..\..\webservices\lib\
    orawsmetadata.jar;.\..\..\j2ee\home\lib\ejb30.jar;.\..\..\j2ee\home\lib\
    ejb.jar;.\..\..\j2ee\home\lib\mail.jar;.\..\..\j2ee\home\lib\http_client.jar;.
    \..\lib\wsif-ejb-design.jar"/>
        <taskdef name="BeanDefinitionGenerator"
     classname="oracle.tip.wsif.ejb.wsdlgen.tool.AntBDFGenerator"
     classpath="${classpath}"/>
        <taskdef name="WSDLGenerator"
     classname="oracle.tip.wsif.ejb.wsdlgen.tool.AntGenerateArtifacts"
     classpath="${classpath}"/>
    </project>
    
  3. Create an ant file to generate the WSDL file under SOA_HOME\bpel\bin. The following build.xml file shows the contents for WSDL file generation.

    <project name="wsif-ejb-binding-design-time" default="" basedir=".">
        <import file="..\system\wsif-ejb-tool.xml"/>
        <property name="jarLocation"
     value="C:\Temp\wsif\DataBindingTestEJB\deploy\ejb1.jar"/>
        <property name="beanDefinitionLocation" value="C:\Temp\wsif\beanDefinition\"/> 
    
        <target name="GenerateBeanDefinition" depends=""> 
           <BeanDefinitionGenerator
                jarLocation="${jarLocation}"
                beanDefinitionLocation="${beanDefinitionLocation}"
                pkg="test.*,databindingtestejb.*"
                logLevel="info"
                jvmArgs="-Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT
                 -DproxySet=true"
                failonerror="true">
            </BeanDefinitionGenerator>
        </target>
    
        <target name="GenerateWSDL" depends="">
            <WSDLGenerator
                jarLocation="${jarLocation}"
                beanDefinitionLocation="${beanDefinitionLocation}"
                artifactsLocation="C:\Temp\wsif\artifacts\"
                schemaLocation=""
                customTypeMappingLocation=""
                jndiName="CustomerEJB"
                initialContextFactory="oracle.j2ee.rmi.RMIInitialContextFactory"
                jndiProviderURL="ormi://myhost-pc.idc.oracle.com:12402/ejb1"
                logLevel="info"
                jvmArgs="-Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT
                 -DproxySet=true"
                strictJaxrpcValidation="true"
                failonerror="true">
            </WSDLGenerator>
        </target>
    </project>
    

5.8.11.2 Bean Definition Generation

Note:

If you want to generate a bean definition with Oracle WebLogic Server, you must add an additional system property to specify the XDK parser for the GenerateBeanDefinition and GenerateWSDL tasks. For instructions, see Section 5.9.9, "ant Bean Definition Generation Error Occurs If the EJB Has a Collection Class."
  1. Create and run an ant target that generates the intermediate type definition file using the BeanDefinitionGenerator task. This target must provide all the attributes needed for the BeanDefinitionGenerator task.

    Here are definitions for the following attributes:

    • jarLocation — The location of the EJB client JAR file. The value for this attribute is already defined at the top level property jarLocation.

    • beanDefinitionLocation — The location of the directory in which the intermediate type definition file goes. The value for this attribute is already defined at the top level property beanDefinitionLocation.

    • pkg — A comma-separated list of packages for which type definition files must be generated. For example, test.*,databindingtestejb.*. Currently, the task does not support *.*.

      When you generate a bean definition with the ant task GenerateBeanDefinition, the bean definition file is generated for the class you specify and for all classes dependent on this class file; nothing is filtered. The package filter mechanism is provided primarily to include other dependent classes that have different package structures.

    • logLevel — The logging level required. Permitted values are DEBUG, INFO, WARNING, and ERROR.

    • jvmArgs — This attribute is not required for the EJB 2.1 JAR file. However, if you are using the EJB 2.0 JAR file and use a proxy server, you must add this attribute and specify a value for your PROXY_HOST (for example, www-proxy.us.mycompany.com) and PROXY_PORT (for example, 80). If you do not use a proxy server, then the jvmArgs attribute and PROXY_HOST and PROXY_PORT properties are not required. The tool automatically uses http://java.sun.com/dtd/ejb-jar_2_0.dtd.

    • failonerror — This must be set to true.

      Here is an example:

      <target name="GenerateBeanDefinition" depends=""> 
         <BeanDefinitionGenerator
              jarLocation="${jarLocation}"
              beanDefinitionLocation="${beanDefinitionLocation}"
              pkg="test.*,databindingtestejb.*"
              logLevel="info"
              jvmArgs="-Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT
               -DproxySet=true"
              failonerror="true">
          </BeanDefinitionGenerator>
        </target>
      

5.8.11.3 Modifying the Bean Definition File

The output of this target is the type definition files in the beanDefinitionLocation directory. The type definition files correspond to classes for the selected package. Note that type definition files are generated for classes having the following:

  • A collection class as member variables

  • A service endpoint/remote/local interface in the ejb-jar.xml file that uses the collection class as parameters/return type

The type definition file name is the same as that of a fully qualified class where a dot (.) is replaced with an underscore (_). For example, for a class with name databindingtestejb.CustomerEJBWebService, the corresponding type definition file name is databindingtestejb_CustomerEJBWebService.xml.

You must provide the missing information for all the type definition files in the beanDefinitionLocation directory. The required information is the contained type for the collection classes. For example, the following type definition file snippet is generated at design time.

<?xml version = '1.0' ?>
<Bean-definition xmlns="http://java.wsif.ejb.binding">
   <Class name="test.databinding.dto.customer.profile.FiledCreditCards"
     serialVersionUID="-8027792423900150501">
       <Fields>
         <Field name="customerCreditCards" type="java.util.Collection">
            <Value>XXXXX</Value>
         </Field>
         <Field name="merchants" type="java.util.TreeSet">
            <Value>XXXXX</Value>
         </Field>
         <Field name="creditCardByMerchant" type="java.util.Hashtable">
            <Key>XXXXX</Key>
            <Value>XXXXX</Value>
         </Field>
       </Fields>
   </Class>
</Bean-definition>
  1. Replace the XXXXX values in this example with the collection content classes.

    The following example shows the modified version of the preceding type definition file:

    <?xml version = '1.0' ?>
    <Bean-definition xmlns="http://java.wsif.ejb.binding">
       <Class name="test.databinding.dto.customer.profile.FiledCreditCards"
     serialVersionUID="-8027792423900150501">
           <Fields>
             <Field name="customerCreditCards" type="java.util.Collection">
                <Value>test.databinding.dto.customer.profile.CustomerCreditCard
                </Value>
             </Field>
             <Field name="merchants" type="java.util.TreeSet">
                <Value>test.databinding.dto.customer.profile.Merchant</Value>
             </Field>
             <Field name="creditCardByMerchant" type="java.util.Hashtable">
                <Key>test.databinding.dto.customer.profile.Merchant</Key>
                <Value>test.databinding.dto.customer.profile.CustomerCreditCard
                </Value>
             </Field>
           </Fields>
       </Class>
    </Bean-definition>
    

5.8.11.4 WSDL File Generation

  1. Create and run an ant target that generates the WSDL file using the WSDLGenerator task. This target must provide all the attributes needed for the WSDLGenerator task. See Step 3 for WSDLGenerator syntax.

    Here are definitions for the following attributes:

    • jarLocation — The location of the EJB client JAR file. The value for this attribute is already defined with the top level property jarLocation.

    • beanDefinitionLocation — The directory location for the intermediate type definition file. The value for this attribute is already defined with the top level property beanDefinitionLocation.

    • artifactsLocation — The directory location for the WSDL and JAX-RPC mapping file.

    • schemaLocation — The comma-separated list (without blank spaces) of all schema files you want to import in the WSDL file. This attribute is optional.

    • customTypeMappingLocation — The location of the custom type mapping file. This attribute is optional.

    • jndiName — The JNDI name for the EJB.

    • initialContextFactory — The initial context factory for the EJB.

    • jndiProviderURL — The JNDI provider URL for the EJB.

    • logLevel — The logging level required. Permitted values are DEBUG, INFO, WARNING, and ERROR.

    • jvmArgs — See Section 5.8.11.2, "Bean Definition Generation" for a description.

    • strictJaxrpcValidation — Determines whether the service endpoint interface, exceptions, and value types are validated according to all of the JAX-RPC validation rules. While the permitted values are true (the default) or false, this attribute must be set to true. If set to false, WSDL file generation still works, but problems occur during runtime.

    • failonerror — Must be set to true.

    Here is an example:

    <target name="GenerateWSDL" depends="">
            <WSDLGenerator
                jarLocation="${jarLocation}"
                beanDefinitionLocation="${beanDefinitionLocation}"
                artifactsLocation="C:\Temp\wsif\artifacts\"
                schemaLocation=""
                customTypeMappingLocation=""
                jndiName="CustomerEJB"
                initialContextFactory="oracle.j2ee.rmi.RMIInitialContextFactory"
                jndiProviderURL="ormi://myhost-pc.idc.oracle.com:12402/ejb1"
                logLevel="info"
                jvmArgs="-Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT
                 -DproxySet=true"
                strictJaxrpcValidation="true"
                failonerror="true">
            </WSDLGenerator>
        </target>
    

5.8.12 Support for Oracle BPEL Process Manager Communication with Oracle Service Bus 3.1 Through T3 Protocol

Support is provided for Oracle BPEL Process Manager communication with Oracle Service Bus 3.1 through the T3 protocol (known as optimized binding). After installing patch 10.1.3.5, note the following additional details:

  • You must apply Oracle's XDK one-off patch for bug 5507491. Contact Oracle Support Services for details.

  • If you are using a JMS adapter that connects to a JMS queue present on Oracle WebLogic Server version 9.2 and the weblogic.jar file has been added in your environment using MetaLink note 549016.1, no server.xml file change is needed. Otherwise, you must perform the following steps:

    1. Open the $ORACLE_HOME/j2ee/container_name/config/server.xml file with a text editor.

      where container_name is the name of the container where Oracle BPEL Process Manager is deployed (For example, oc4j_soa).

    2. Search for <shared-library name="oracle.bpel.common" version="10.1.3">.

    3. Inside the oracle.bpel.common shared library, add one more <code-source path/> as shown below:

      <code-source path="$ORACLE_HOME/bpel/lib/wlclient_oc4jinterop.jar"/>
      

      Ensure that $ORACLE_HOME is expanded to its actual path (for an example, look at the entry for orabpel.jar in the same file).

    4. Note the following capabilities of optimized binding.

      Use Case Protocol Options Transaction Propagation
      From Oracle BPEL Process Manager on OC4J to Oracle Service Bus on Oracle WebLogic Server: T3 No
      From Oracle Service Bus on Oracle WebLogic Server to Oracle BPEL Process Manager on OC4J ORMI/OPMN No
      From Oracle BPEL Process Manager on Oracle WebLogic Server to Oracle Service Bus on Oracle WebLogic Server T3 Yes
      From Oracle Service Bus on Oracle WebLogic Server to Oracle BPEL Process Manager on Oracle WebLogic Server T3, IIOP, and RMI over HTTP (that is, HTTP tunneling) Yes

5.8.13 Migrating In-flight Instances for Changed BPEL Processes

You can migrate in-flight instances for changed BPEL processes. This migration typically involves migrating a running instance created from an older process definition to a newer process definition. Instance execution then runs to completion in the newer definition. After migration is complete, the older process instance is marked as closed and cancelled. For example, you migrate instance number 1234 of HelloWorld revision 1.0 to process HelloWorld revision 2.0, where execution then runs to completion.

5.8.13.1 Migration Guidelines

Before performing a migration, you must review the following guidelines to understand how instance migration works.

  • Migration is only permitted between revisions of the same process name (for example, HelloWorld 1.0 to HelloWorld 2.0 or OrderBooking 3.0 to OrderBooking 7.0).

  • Any two revisions should have compatible interfaces. However, no tool currently enforces this requirement. Therefore, ensure that you maintain this compatibility. For example, ensure that:

    • Changes are incremental and do not contradict definitions from earlier revisions.

    • Interfaces used for communication with external services, such as partner links, messages, types, and bindings are not changed in an incompatible way.

    • Variables have compatible types and names.

    • Partner links have compatible definitions, such as partner link names and operations.

      For example, if a partner link name has changed between the older source revision and the newer destination revision, the state from the source revision instance is not copied to the destination revision instance. Therefore, the receive activity does not know how to handle the callback message that it receives.

  • You can only migrate asynchronous processes. Asynchronous processes, which are typically long running, have pauses at the dehydration points. Synchronous processes cannot be migrated because there are no dehydration points.

  • Migration mapping is permitted from certain activities with dehydration points. There are two types of activities involved in migration.

    • Container activities

      Examples of containers are scopes, flows, sequences, flowNs, and so on.

    • All other activities, such as assigns, throws, receives, and so on.

    Migration mapping is subject to thread constraints that govern several activities. Oracle BPEL Server permits only one thread per activity and up to N threads per container. Containers such as scopes and sequences permit only one thread of execution at any time. Table 5-3 provides details about supported migrations of activities.

    Table 5-3 Supported Activity Migrations

    You Can Migrate From This Source Definition... To This Target Definition... Description

    Receive activity

    Any activity except for those belonging to a flowN.

    Note: You can migrate to a flowN, but not inside it.

    If the migrated item is inside a flow, only that branch of the flow is executed in the destination. In this case, there is only one source thread and therefore at most one thread/work item is created in the destination process. A work item is a task for Oracle BPEL Server to perform. Threads are represented by work items and governed by container activities.

    Wait activity

    Any activity except for those belonging to a flowN.

    The same behavior occurs as described for the receive activity.

    Pick activity

    Any activity except for those belonging to a flowN.

    The pick is divided into a list of onMessage and onAlarm constructs. There are N work items created in the parent process and therefore potentially N different execution points in the destination. In most cases, only the one source work item is migrated (either the first onMessage or the first onAlarm).

    Any dehydration point (receive, wait, pick, onAlarm, and onMessage)

    Any activity except for those belonging to a flowN.

    The N active work items in the source process can be migrated to create M active work items in the destination process. The only requirements are the following:

    • M =< N

      where M represents the number of possible work items in the destination. In this example, this is M=1. However, if you migrate into another flow, potentially >1 work items can be created in each of the branches.

    • If a container permits only one thread of execution (scope, process, sequence, and so on), you cannot migrate work items that cause a chase in that container. A chase is when you have more than the maximum number of work items allowed in a container.

    Any dehydration point (receive, wait, pick, onAlarm, and onMessage)

    To a pick activity

    Migration to a pick means that the pick becomes the execution point. Oracle BPEL Server simply runs the pick.

    Any dehydration point (receive, wait, pick, onAlarm, and onMessage)

    Into a pick activity

    Migration into a pick activity means migration into any of the onMessage or onAlarm elementary activities that comprise a pick. You can migrate to one of these.

    Any dehydration point (receive, wait, pick, onAlarm, and onMessage)

    To a flow activity

    Migration to a flow means that the flow becomes the execution point. Oracle BPEL Server simply runs the flow.

    Any dehydration point (receive, wait, pick, onAlarm, and onMessage)

    Into a flow activity

    Migration into a flow activity means that if, for example, you migrate two branches into a flow activity that has three branches, only two are run.

    Activities inside a flow activity

    Into another flow activity

    This migration type is supported, Several branches can be migrated.


  • An instance can be migrated from inside a source while loop and also into a destination while loop. The loop counter variable is copied and the state is maintained.

  • Activities inside an exception handler can be a migration source and destination. After the handler is complete, execution starts after the block in which the exception handler is defined.

  • When migrating to a scope container activity, Oracle BPEL Server opens the scope and executes the first activity in the scope that is not a container.

  • When migrating an instance, the new execution points can be any activity in the destination process except for an activity that belongs to a flowN activity.

  • Migrating to a flow activity causes Oracle BPEL Server to open the flow and run parallel threads in it.

  • Variables are automatically copied to a new process instance. Variable mapping is done by variable name and the location in the lexical scope chain. The one exception is the process scope. In that location, variables are copied between the processes regardless of how they are lexically hidden by scopes (if any).

    Note the following details about variable migration:

    • Variables are copied from process scope to process scope.

    • Variables are copied from each source stack frame according to visibility and lexical rules.

    • If a variable does not exist in the destination process, it is not copied and a warning message is issued.

    • If the destination process contains new variables, a message similar to the following appears in the log files:

      <2009-07-15 03:06:25,381> <WARN> <default.collaxa.cube.engine.migrate> 
      <CubeEngine::migrateVariables> Scope "rootScope@6" has a variable 
      "newPickService_InputVariable" which is NOT defined in the source scope(s).
      

      Note that new variables such as this are not initialized.

    • If a variable does exist in the destination process, it must be compatible for the copy to succeed.

    • Variables present in the destination process are only instantiated and initialized.

  • Endpoints can be migrated. After migrating a process instance, all the pending callbacks to that instance are routed to the new, migrated instance.

5.8.13.2 Migrating Instances

This section describes how to perform instance migration from Oracle BPEL Control.

Note:

You typically require multiple revisions of a process already deployed in order to migrate. Otherwise, when you perform a migration, it is to the same revision. Note that migrating to the same revision can be useful during the development and testing phases.
  1. Log in to Oracle BPEL Control.

  2. Select one of the following methods to migrate. If necessary, initiate the instance from which to migrate.

    From the Processes tab:

    This option enables you to migrate all instances of a process revision.

    1. Click the Processes tab.

    2. Select the process revision from which to migrate (for example, select MigrationTestReceive2Assign (v. 1.0). You select the destination definition on the Migration page.

      Note:

      The user interface does not restrict you from selecting multiple processes of different names (for example, OrderBooking (v. 1.0) and LoanFlow (v. 1.0)). However, this type of selection is not supported.
    3. Click Migrate Process Instances at the bottom of the page.

    4. Go to Step 3.

    From the Instances tab:

    This option enables you to migrate a single instance of a process revision or multiple instances provided that all the instances belong to the same BPEL process.

    1. Click the Instances tab.

    2. Select the instance from which to migrate. You select the destination definition on the Migration page.

      Note:

      The user interface does not restrict you from selecting multiple instances of different names (for example, instance 1001 of OrderBooking (v. 1.0) and instance 275 of LoanFlow (v. 1.0)). However, this type of selection is not supported.
    3. Click Migrate at the bottom of the page.

    4. Go to Step 3.

    From the Audit or Flow tab of a specific BPEL instance:

    1. Click Migrate.

    2. Go to Step 3.

  3. View the Migration page.

    Description of bpel_migrate1.gif follows
    Description of the illustration bpel_migrate1.gif

    The source process definition displays on the left side of the page. This is the older revision. The destination process definition displays on the right side of the page. The column in the middle represents mappings from the source process to the destination process.

    The mappings represent how work items are migrated to run in the new process definition. Since processes only dehydrate in certain types of activities, only these activities are shown in the left column of the rules mappings.

    You execute the mapping to migrate the specified process instances. Upon successful migration, the source process instance is ended and the new process instance proceeds at the specified migration points. All variables, partner link states, and so on are copied (if compatible) to the new process instances.

    Note:

    When expanding branching activities such as picks, switches, and flows with Internet Explorer 7, an additional closed branch displays off to the side. This additional branch can be ignored.
  4. From the dropdown list in the destination tree, select the version to which to migrate. For this example, revision 2.0 is selected.

  5. From the source process definition, select activities from which to migrate. For example, select a receive activity.

  6. From the destination process definition, select activities to which to migrate. For example, select an assign activity. This causes the assign activity to display in the middle column.

  7. To disable activities for migration, select the plus icon for the activity in the middle column.

    Description of bpel_migrate5.gif follows
    Description of the illustration bpel_migrate5.gif

    Note:

    You must manually select activities to migrate (for example, select to migrate a receive activity or a wait activity to an assign activity). This creates mapping rules for dehydration points in order for activities to be moved to the new revision. If you do not create mapping rules for the dehydration points, no migration is performed when you click Migrate Instances.
  8. If you want to save your mapping into a migration map that can be reused at a later time, click Save. Otherwise, go to Step 9.

    The migration map defines how the threads are created in the new destination process from the old process. Each rule contains the source activity ID and a destination activity ID. The source process name, the destination process name, and an embedded list of instance IDs to migrate are also included in the migration map.

    1. Enter a name for the file to which to save the mappings, and click OK.

    2. Click OK when prompted to confirm the name and location of the template.

    3. Click Migration Maps.

      A list of saved maps is displayed.

      Description of bpel_migrate2.gif follows
      Description of the illustration bpel_migrate2.gif

    4. Select the map to use.

  9. Click Migrate Instances to create the destination instance.

  10. Review the message that displays and click Migrate. The migration mapping is saved for later use.

    Description of bpel_migrate3.gif follows
    Description of the illustration bpel_migrate3.gif

    The following message is displayed.

    Description of bpel_migrate6.gif follows
    Description of the illustration bpel_migrate6.gif

  11. Click OK.

  12. If you want to view specific details about the migration, click Show Log.

  13. Click the Instances tab.

  14. Click the destination instance to which you migrated.

  15. Click Flow.

    Note that the destination revision includes a link to the flow trace of the old revision.

  16. Click the link.

    The flow trace of the old revision is displayed. A link to the new revision is displayed at the bottom of the flow. The older process instance is marked as closed and cancelled.

5.8.13.3 Viewing Logs

You can view migration logs in either of two ways:

  • Clicking Show Log & Migrate in the Confirm dialog.

  • Clicking the Show Log link in the upper right section of the Migration page.

If you are attempting to migrate a single BPEL process instance or bulk instances deployed to a middle tier Oracle SOA Suite installation and attempt to view the migration logs, the log window that displays may be empty. Perform the following steps to set the Oc4jSet parameter. This enables you to receive the correct log file output. Oracle recommends that you always set the Oc4jSet parameter.

  1. Open the $ORACLE_HOME/Apache/Apache/conf/mod_oc4j.conf file.

  2. Add add Oc4jSet flush true inside the tag IfModule mod_oc4j.c.

    <IfModule mod_oc4j.c> 
          Oc4jSet flush true 
          </IfModule> 
    
  3. Restart Oracle HTTP Server to enable the configuration change.

5.8.14 Preventing Duplicate Recovery of Instances

In releases prior to 10.1.3.5, if automatic recovery of BPEL processes was permanently enabled in Oracle BPEL Control, it potentially caused a duplicate recovery of instances.

For example, Oracle BPEL Server temporarily puts working process instances in the recovery queue. If auto recovery runs when these instances are in the recovery queue, the instances are picked up and recovered. A short time later, BPEL proceeds with recovery of the original instance, resulting in two identical instances and duplicate output.

With this release, a new property named threshHoldTimeInMinutes is provided in Oracle BPEL Control that enables you to set a time threshold that prevents recently received messages from resubmission to automatic recovery until the threshold is exceeded.

The default value is 10 minutes. To access this property, select Configuration > Auto-Recovery in Oracle BPEL Control.

5.8.15 serverMode Redeployment Property

With this release, a new property named serverMode has been added to Oracle BPEL Admin Console. You can set this property to the following values:

  • production — Redeployment of the process with the same revision is not allowed.

  • development — Redeployment of the process with the same revision marks the existing instance as stale.

  • promiscuous - Redeployment of the process with the same revision does not make the instance stale. Work items are migrated.

5.9 10.1.3.5.1 Oracle WebLogic Server Issues and Workarounds

This section describes issues and workarounds specific to using Oracle SOA Suite with Oracle WebLogic Server:

5.9.1 Recompiling Invalid Objects After Applying the Upgrade Script

After running the upgrade script to upgrade the orabpel and oraesb schemas from version 10.1.3.x to higher versions, some objects in the schema become invalid.

  1. Run the following SQL command as the orabpel user to display all invalid objects in the orabpel schema:

    select object_name from user_objects where status like '%INVALID%';
    
  2. Run the same command as the oraesb user to display all invalid objects in the oraesb schema.

  3. Recompile invalid orabpel objects by executing the UTL_RECOMP package function.

    EXEC UTL_RECOMP.recomp_serial('ORABPEL'); 
    

    This recompiles all invalid orabpel objects in the orabpel schema.

  4. Recompile invalid oraesb objects by executing the UTL_RECOMP package function.

    EXEC UTL_RECOMP.recomp_serial('ORAESB'); 
    

    This recompiles all invalid oraesb objects in the oraesb schema.

    Note:

    The UTL_RECOMP package may not be available to the orabpel or oraesb user. You may need to run this script as the sys user.

5.9.2 OC4J Configuration File Described in the BPEL Sample Files

The samples included in the $ORACLE_HOME/bpel/samples directory contain numerous references to configuring the oc4j-ra.xml file. This file is not relevant to JCA adapter - Oracle WebLogic Server configuration in release 10.1.3.5.1. For instructions on configuring JCA adapters to work with Oracle WebLogic Server, see the following sections of Oracle SOA Suite Installation Guide for WebLogic Server:

  • Section 1.6.5, "Running Adapter Samples"

  • Section 1.6.5.1, "Configuring Outbound Connection Pool for Adapters in Weblogic"

This guide is available at the following location on the Oracle Technology Network:

http://download.oracle.com/docs/cd/E12524_01/nav/portal_booklist.htm

5.9.3 Configuring Oracle Internet Directory to Connect to the Oracle BPEL Worklist Application

Perform the following steps to connect Oracle Internet Directory 10.1.4.3 to the Oracle BPEL Worklist Application. Not doing so results in login failure errors when attempting to connect to Oracle BPEL Worklist Application.

  1. Stop the managed Oracle WebLogic Server.

  2. Back up the existing $ORACLE_HOME/bpel/system/services/config/is_config.xml file.

  3. Copy $ORACLE_HOME/bpel/system/services/config/ldap/is_config_for_OID.xml to $ORACLE_HOME/bpel/system/services/config/is_config.xml.

  4. Update is_config.xml to point to a valid Oracle Internet Directory repository.

  5. Back up the existing $ORACLE_HOME/j2ee/home/config/jazn.xml file to jazn.xml.orig in the same location.

  6. Open $ORACLE_HOME/j2ee/home/config/jazn.xml.

  7. Comment out the section that uses the XML provider.

  8. Uncomment the section using LDAP, and provide Oracle Internet Directory provider details similar to the following.

    <jazn provider="LDAP" location="ldap://myhost-4.us.oracle.com:40864" 
     default-realm="us"> 
       <property name="ldap.user" value="cn=orcladmin"/> 
       <property name="ldap.password" value="!welcome1"/> 
       <property name="ldap.protocol" value="no-ssl"/>  
    </jazn> 
    
  9. Restart the managed Oracle WebLogic Server.

5.9.4 Configuring the File Adapter for Clustered Environments

If using the file adapter in a clustered environment, ensure that you perform the following steps to ensure that message processing is successful during a failover.

  1. Open the $ORACLE_HOME/soa/connectors/FileAdapter/META-INF/weblogic-ra.xml file.

  2. Update the file with the following values.

    <pool-params> 
     <initial-capacity>50</initial-capacity> 
     <max-capacity>2147483647</max-capacity> 
     <capacity-increment>100</capacity-increment> 
     <shrinking-enabled>true</shrinking-enabled> 
     <match-connections-supported>false</match-connections-supported> 
     <shrink-frequency-seconds>60</shrink-frequency-seconds> 
     <connection-creation-retry-frequency-seconds>2</connection-creation-retry-fre 
     quency-seconds> 
     <connection-reserve-timeout-seconds>5</connection-reserve-timeout-seconds> 
     <use-first-available>true</use-first-available> 
     </pool-params>
    

5.9.5 Configuring the Auto Loan Demo Process

For the auto loan BPEL sample to work correctly, you must perform the following updates to the bpel.xml file. Not doing so results in an exception error.

  1. Open the bpel.xml file for the project.

  2. Under the <partnerLinkBinding name="LoanAdvisorAgentPL"> section, change the following syntax:

    <property 
     name="wsdlRuntimeLocation">http://${hostname}:${http_port}/rules/${domain_id}/
     ${process_id}/${process_revision}/ LoanAdvisorAgent
    /LoanAdvisorAgent?WSDL</property> 
    

    to:

    <property 
     name="wsdlRuntimeLocation">http://${hostname}:${http_port}/rules/${domain_id}/
     ${process_id}/${process_revision}/LoanAdvisorAgent?WSDL</property> 
    
  3. Open the following files:

    • AutoLoanFlow\decisionservices\CreditRatingAgent\ear\META-INF\application.xml

    • AutoLoanFlow\decisionservices\LoanAdvisorAgent\ear\META-INF\application.xml

  4. Change the following syntax in both files:

    < application version="1.4" xmlns="http://java.sun.com/xmlns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"> 
    

    to:

    <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 
     1.3//EN" "http://java.sun.com/j2ee/dtds/application_1_3.dtd"> 
     <application> 
    

5.9.6 Auto Loan Demo Deployment Errors

Deployment of the auto loan demo can cause errors in the deployDecisionServices target.

As a workaround, perform the following steps:

  1. Set JAVA_HOME to $ORACLE_HOME/jdk at the developer's prompt.

    The deployDecisionService target uses the system classpath for compilation and does not use the client_classpath like other obant tasks.

  2. Deploy the auto loan demo with ant instead of obant.sh.

5.9.7 OrderBooking Tutorial Deployment Fails with ant

The 127.OrderBookingTutorial in the $ORACLE_HOME/bpel/samples/tutorials directory does not deploy successfully with ant, even though a BUILD SUCCESFULL message is displayed.

This is because tutorials such as 127.OrderBookingTutorial include EAR/WAR file deployments that require manual, postdeployment steps. The following EAR/WAR files are generated and available in the $ORACLE_HOME/j2ee/home/applications directory, and must be manually deployed using the Oracle WebLogic Server Administration Console:

  • CreateOrderBookingUI.war

  • SelectManufacturingUI.war

  • default_OrderApproval_1_0_OrderApproval.ear

  • default_SelectManufacturing_1_0_Approval.ear

Note that the BPEL and ESB components included with 127.OrderBookingTutorial are automatically deployed to Oracle WebLogic Server Administration Console with ant.

5.9.8 Oracle WebLogic Server-Specific JAR Files Cannot Be Used to Generate Bean Definition Files

The GenerateBeanDefinition and GenerateWSDL tasks cannot be executed for old Weblogic EJB projects. Use Weblogic Workshop 10.3 or higher to generate the EJB projects for use with the WSIF-EJB binding ant tool.

5.9.9 ant Bean Definition Generation Error Occurs If the EJB Has a Collection Class

If you want to generate the bean definition file for an EJB class that has a collection class in the method description, you must add the following system property to specify the XDK parser. Not doing so causes an exception error to occur during bean definition generation.

  1. Update the GenerateBeanDefinition task to include the property shown in bold.

    <target name="GenerateBeanDefinition" depends=""> 
             <BeanDefinitionGenerator 
                jarLocation="${jarLocation}" 
                 beanDefinitionLocation="${beanDefinitionLocation}" 
                 pkg="hello.*,databindingtestejb.*,com.otn.samples.sessionbean.*" 
                 logLevel="debug" 
                 jvmArgs="-Dhttp.proxyHost=www-proxy.us.oracle.com 
     -Dhttp.proxyPort=80 -DproxySet=true 
     -Djavax.xml.parsers.DocumentBuilderFactory=oracle.xml.jaxp.JXDocumentBuilderFa
     ctory" 
                 failonerror="true"> 
             </BeanDefinitionGenerator> 
     </target> 
    
  2. Make similar updates to the GenerateWSDL task.

For information about bean file and WSDL file generation, see Section 5.8.11.2, "Bean Definition Generation."

5.9.10 TaskManager Not Displaying as a Deployed Process in Oracle BPEL Control

When you deploy an application that includes human workflow, the TaskActionHandler and TaskManager should also display as deployed processes in Oracle BPEL Control. If the TaskManager does not display, perform the following workaround:

  1. Stop Oracle BPEL Control.

  2. Copy bpel_TaskActionHandler.jar from:

    SOA_Oracle_Home/bpel/install/extensions
    

    to:

    SOA_Oracle_Home/bpel/domains/domain_name/deploy
    

    where domain_name is the name of the domain in which the human workflow application is deployed.

  3. Update the wsif-ejb-tool.xml file.

    Add .\..\..\..\wlserver_10.3\server\lib\weblogic.jar to the property name classpath.

    <?xml version="1.0"?>
    <project name="wsif-ejb-binding" default="" basedir=".">
    <property name="classpath" value=".\..\..\..\wlserver_10.3\server\lib\weblogic.jar;
    .\..\lib\xmlparserv2.jar;.\..\..\webservices\lib\saaj-api.jar;.\..\..\
    webservices\lib\wsa.jar;.\..\..\webservices\lib\wsclient.jar;.\..\..\
    webservices\lib\wsserver.jar;.\..\..\webservices\lib\jaxrpc-api.jar;.\..\..\
    webservices\lib\orasaaj.jar;.\..\..\webservices\lib\orawsdl.jar;.\..\..\
    webservices\lib\orawsmetadata.jar;.\..\..\j2ee\home\lib\ejb30.jar;.\..\..\
    j2ee\home\lib\ejb.jar;.\..\..\j2ee\home\lib\mail.jar;.\..\..\j2ee\home\lib\
    http_client.jar;.\..\lib\wsif-ejb-design.jar"/>
    
  4. Restart Oracle BPEL Control.

5.9.11 Domain Picker Page is Displayed Even When Only One Domain is Available

When you log in to Oracle BPEL Control, the Domain Picker page is displayed each time, even when only one domain is available for selection. Select the available domain and proceed.