16 Oracle BPEL Process Manager

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

Note:

For details about restrictions on using non-ASCII characters in BPEL monitor metric names, see Section 17.1.24, "BPEL Monitor Metric Names in Non-ASCII Characters Causes Deployment Error, Missing Data Object on Oracle BAM Server."

16.1 General Issues and Workarounds

This section describes general issue and workarounds. It includes the following topics:

16.1.1 No Restriction on Adding a Compensate Activity to any Part of a BPEL Process Flow

As described in section "Using Compensation After Undoing a Series of Operations" of the Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite, the compensate activity is only called in the fault handler or compensate handler of the area immediately encompassing a scope activity.

However, you are not restricted from adding a compensate activity to any other part of your BPEL process flow in the BPEL Process Designer of Oracle JDeveloper. If you add a compensate activity outside of a scope, a null pointer exception error is displayed during project compilation. Note that this error message does not clearly indicate that the problem is that you added the compensate activity outside of a scope activity.

Only use a compensate activity in a fault handler or compensate handler of a scope activity.

16.1.2 Exception in Switch Activity Evaluation Returns an Error

If you use a selectionFailure or an XPath expression in a switch case evaluation and an exception error occurs, the default behavior is to return an exception error to the client. This behavior is in compliance with the Business Process Execution Language for Web Services Specification. For example, the following switch activity condition returns an exception error, as expected.

<switch name="SwitchWhatIf"> 
  <case 
condition="bpws:getVariableData('inputVariable','payload','/client:BPELBulkImp 
ortProcessRequest/client:action') != 'PREIMPORT'">

This condition is only false, and therefore does not return an exception, when action='PREIMPORT'.

16.1.3 Use a Wait Activity Instead of thread.sleep() in a Java Embedding Activity

If you create and deploy a BPEL process that uses thread.sleep() in a Java Embedding activity, the executing thread is blocked and the transaction associated with that thread is prevented from committing. This causes BPEL instances to show up only after the wait is over, which is the expected behavior.

Instead, use a wait activity, which releases the resource upon entering the activity and enables the ongoing transaction to commit and the BPEL instance data to hydrate into the data store.

16.1.4 Using Dynamic HTML for Message Content in an Email Activity Requires the Use of a CDATA Function

If the HTML for the message content of an email activity is generated dynamically, (as with XSLT, file read, and so on), it must be wrapped in a CDATA function. This prevents conflicts between the XML/HTML content of the message body and BPEL's internal XML data structures.

For example, assume you use the following append operation for the message content inside the email activity:

<bpelx:append> 
  <bpelx:from 
    expression="ora:processXSLT('xsl/email.xslt',bpws:getVariableData('Variable_1'
    ))"/> 
  <bpelx:to variable="varNotificationReq" part="EmailPayload"
    query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[1]
    /ns1:ContentBody"/>
</bpelx:append>

For this to work correctly, you must pass the output of the processXSLT() function to the CDATA() function.

<%ora:toCDATA(xdk:processXSLT('xsl/email.xslt', 
 bpws:getVariableData('inputVariable','payload','/client:process/client:input') 
 ))%> 

16.1.5 Do Not Specify the wsa and bpel Normalized Message Property Prefixes with the bpelx:property

Tables H-1 and H-2 of Appendix H, "Normalized Message Properties" of the Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite describe the Oracle BPEL Process Manager and Oracle Web Services Addressing properties.To use these properties correctly with the bpelx:property in activities such as a receive activity, ensure that you do not include the wsa. or bpel. prefixes. For example:

<receive name="receiveInput" partnerLink="bpelprocessb_client"
portType="client:BPELProcessB" operation="process" variable="inputVariable"
 createInstance="yes">
           <bpelx:property name="action" variable="v1"/>
           <bpelx:property name="messageId" variable="v2"/>
           <bpelx:property name="relatesTo" variable="v3"/>
           <bpelx:property name="replyToAddress" variable="v4"/>
           <bpelx:property name="replyToPortType" variable="v5"/>
           <bpelx:property name="replyToService" variable="v6"/> 
</receive>

16.1.6 Oracle JDeveloper May Hang When Using the Expression Builder

Using the Expression Builder to build XPath expressions may cause Oracle JDeveloper to hang. If that happens, perform the following steps:

  1. Kill the Oracle JDeveloper process.

  2. Restart Oracle JDeveloper.

  3. Select Tools > Preferences > SOA, and deselect the Validate Expression checkbox.

After performing these steps, Oracle JDeveloper should no longer hang.

16.1.7 Cannot Format the Body of an E-mail Message as HTML with the processXSLT Function

You cannot use the BPEL XPath extension function processXSLT to format the body of an e-mail message as HTML. For example, assume you use the append operation for the content body and the processXSLT function to get the content in HTML format inside an e-mail activity:

<bpelx:append>
  <bpelx:from
    expression="ora:processXSLT('xsl/email.xslt',bpws:getVariableData('Variable_1'
     ))"/>
  <bpelx:to variable="varNotificationReq" part="EmailPayload"
    query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[1]
      /ns1:ContentBody"/>
</bpelx:append> 

The Oracle Enterprise Manager Fusion Middleware Control Console audit trail indicates that the payload is passed to the notification service, but the e-mail that is sent contains no content.

16.1.8 getVariableData Function Throws a selectionFailure if the Result Node Set is of a Size Other Than One During Execution

According to the Business Process Execution Language for Web Services Specification, if the the locationPath argument of the bpws:getVariableData() function selects a node set of a size other than one during execution, the standard fault bpws:selectionFailure must be thrown by a compliant implementation.

For example, the following count() function does not work if there are multiple entries of product elements under StoreRequest, which would cause a selectionFailure fault to be thrown.

count(bpws:getVariableData('inputVariable',
 'payload','/ns2:StoreRequest/ns2:product'))

To make this work, change the syntax to the following:

"count($inputVariable.payload/ns2:product)"

16.1.9 Oracle JDeveloper Hangs when Nested Expressions are Manually Entered in the Expression Builder

Oracle JDeveloper hangs when you manually enter nested expressions in the Expression field of the Expression Builder dialog.

As a workaround, manually edit the BPEL project in Source view.

16.1.10 Selecting the Key for an Entity Variable in the Browse Entity Variable Dialog

When selecting the local part of an entity key by browsing entity variables, entity icons display in the expanded element tree. These icons are identified by a blue x inside parentheses, and indicate which elements include entity keys. Selecting these elements does not update the Key Local Part or Key Namespace URI fields in the Specify Key dialog. Instead, you must expand these elements to select the actual key to get the key's local part and namespace. For example:

  1. In the Bind Entity dialog, click the Add icon to invoke the Specify Key dialog.

  2. To the right of the Key Local Part field, click the Browse Entity Variable icon.

  3. Note that a blue x inside parentheses indicates which elements include entity keys. Do not select these elements.

  4. Expand these elements to display the entity keys available for selection.

  5. Select an entity key, and click OK.

    The Key Local Part and Key Namespace URI fields of the Specify Key dialog are populated with information about your selection.

16.1.11 BPEL Project Customization Does Not Support DVM and XREF Files

Domain value map (DVM) and cross reference (XREF) files are not supported in a SOA composite application that is enabled for customization.

For more information about customization of BPEL projects, see Chapter 15, "Customizing SOA Composite Applications" of Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite.

16.1.12 MIME Type for Voice Notification in BPEL Voice Activity Requires Modification

In a BPEL voice activity, the MIME type for message content generated in the source code is in text/vxml format. However, the message sent from the composite to the voice XML driver must be in text/plain format. This is because the voice XML driver adds the voice XML wrapper to the message before sending it to the destination point.

If the message content sent to the driver is in text/vxml format for the MIME type, a message delivery failure occurs. Therefore, manually change the MIME type for the voice payload content to be text/plain in Source mode in Oracle JDeveloper.

<scope name="VoiceApproval">
. . .
. . .
   <copy>
      <from expression="string('text/plain')"/>
      <to variable="varNotificationReq" part="VoicePayload"
      query="/VoicePayload/ns1:Content/ns1:MimeType"/>
   </copy> 
. . .
. . .
</scope>

16.1.13 Callback Not Received When Two Asynchronous Methods Are Invoked Using the Same Partner Link Definition

A BPEL process does not receive a callback when two asynchronous methods are invoked on an external stateless web service using the same partner link definition.

As a workaround, perform one of the following tasks:

  • Create a separate partner link for each invoke and receive pair in the BPEL process when calling this type of web service. The callback is received and the BPEL process completes successfully when you have more than one method invoked on the same partner link.

  • Add the extension attribute bpelx:conversationId to an invoke activity, receive activity, or onMessage branch of a pick activity. This enables you to programmatically set the conversation ID and have multiple conversations on one partner link. For example:

    <invoke name="Invoke_1" inputVariable="Variable_1" 
            partnerLink="BPELProcess2.bpelprocess2_client" 
            portType="ns4:BPELProcess2" operation="process" 
            bpelx:conversationId="bpws:getVariableData('convId1')"/> 
    <invoke name="Invoke_2" inputVariable="Variable_1" 
            partnerLink="BPELProcess2.bpelprocess2_client" 
            portType="ns4:BPELProcess2" operation="process" 
            bpelx:conversationId="bpws:getVariableData('convId2')"/> 
    <receive name="Receive_1" createInstance="no" 
            variable="Variable_2" 
            partnerLink="BPELProcess2.bpelprocess2_client" 
            portType="ns4:BPELProcess2Callback" 
            operation="processResponse" 
            bpelx:conversationId="bpws:getVariableData('convId1')"/> 
    <receive name="Receive_2" createInstance="no" 
            variable="Variable_2" 
            partnerLink="BPELProcess2.bpelprocess2_client" 
            portType="ns4:BPELProcess2Callback" 
            operation="processResponse" 
            bpelx:conversationId="bpws:getVariableData('convId2')"/> 
    

16.1.14 Cannot Upgrade Oracle BPEL Process Manager Client Java API Reference to 11g Release 1

Custom applications coded with the Oracle BPEL Process Manager 10.1.3 Client Java API cannot currently be upgraded to the 11g Release 1 Client Java API. As a workaround, you can use the Infrastructure Management API that is shipped with Release 1. However, note that this API is currently being rationalized and reworked. Periodic updates to the Infrastructure Management JavaDoc are being made available on the Oracle Technology Network. Visit the following URL for details:

http://www.oracle.com/technology/products/soa/bpel/collateral/documentation.html

16.1.15 New Composite Instance Created when a Subsequent Invoke Activity Goes into a BPEL Midprocess Receive Activity

This occurs because the caller does not provide information about the composite instance ID in a subsequent call. Therefore, the Service Infrastructure creates a new composite instance, although the call is routed to an already-created composite instance.

16.1.16 Parsing of MIME Attachments is Not Supported

A BPEL process can receive a MIME attachment along with the payload. The attachment can be in any format (for example, doc, PDF, JPEG, XML, text, and so on). If the BPEL process receives an XML attachment and must parse the XML to get an element value, you cannot do it using a single XPath function. This task must be performed in two steps:

  1. Use the ora:writeBinaryToFile XPath function.

    <copy> 
         <from expression="ora:writeBinaryToFile('input2','bin',
     'file:///tmp/out/attachment.xml')"/> 
         <to variable="input2" part="bin"/> 
    </copy> 
    
  2. Use the doc XPath function to read the XML element from the above file.

    <copy> 
         <from expression="ora:doc('file:///tmp/out/Input.xml')"/> 
         <to variable="DecodedAttachment" query="/ns1:discountandshipping"/> 
    </copy>
    

16.1.17 sensorAction.xml File is Not Correctly Updated After Activity or Variable Sensor Changes

When you modify the name of an activity sensor or variable sensor in monitor view in Oracle BPEL Designer, the sensorAction.xml file is not correctly updated. Old sensor names still exist and must be removed manually from the sensorAction.xml file before deploying the SOA composite application. For example, assume you change a sensor name from ActivitySensor_1 to MyActivitySensor_1. If you save your changes and look in the sensorAction.xml file, both the old and new names are displayed:

<?xml version = '1.0' encoding = 'UTF-8'?> 
<actions 
@ targetNamespace="http://xmlns.oracle.com/TryUpdateSensorApp_jws/TryUpdateSenso 
@ rApp/TryUpdateSensorApp" xmlns="http://xmlns.oracle.com/bpel/sensor" 
@ xmlns:tns="http://xmlns.oracle.com/TryUpdateSensorApp_jws/TryUpdateSensorApp/T 
@ ryUpdateSensorApp" xmlns:pc="http://xmlns.oracle.com/bpel/sensor"> 
   <action name="SensorAction_1" publishName="" 
publishType="BpelReportsSchema" enabled="true" filter="" publishTarget=""> 
      <sensorName>ActivitySensor_1</sensorName> 
      <sensorName>MyActivitySensor_1</sensorName> 
   </action> 
</actions>

Open the file in Source view in Oracle BPEL Designer and remove the line with the old name, then save the file.

<sensorName>ActivitySensor_1</sensorName>