Oracle® Application Server Release Notes and New Features 10g Release 3 (10.1.3.5.1) Part Number E15342-03 |
|
|
View PDF |
This chapter describes issues associated with Oracle BPEL Process Manager. It includes the following topics:
Section 5.1, "Installation, Deinstallation, and Upgrade Issues and Workarounds"
Section 5.2, "Modeling and Design-Time Issues and Workarounds"
Section 5.6, "Deployment and Runtime Issues and Workarounds"
Section 5.9, "10.1.3.5.1 Oracle WebLogic Server Issues and Workarounds"
This section describes the following issues and workarounds:
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>
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.
This section describes the following issues and workarounds:
Section 5.2.1, "Renaming WSDL File Service Endpoints Is Not Supported in Oracle JDeveloper"
Section 5.2.2, "Imported WSDL and XSD Files Must Be Under the bpel Folder"
Section 5.2.4, "Availability of getFaultName and getFaultAsString XPath Functions in a Catch Branch"
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.
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"
Perform the following steps to pass values to security headers.
Import the schema file.
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0
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"/>
Copy values into these newly-created variables.
Insert the password after the user name (this occurs in the assign activity).
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>
Open the partner link activity.
Click the Property tab.
Click the Add button.
Select wsseheaders and assign it the value of propagate.
Complete design of your BPEL process.
Deploy and test your BPEL process.
The XPath functions getFaultName
and getFaultAsString
are now available in a catch branch. In previous releases, these only worked in a catchAll branch.
This section describes the following issues and workarounds:
Section 5.3.1, "WSIF ant Tool Does Not Support WSDL Generation for EJB 3.0-Based JARs"
Section 5.3.3, "WSDL Generation Failure with the Concurrentmap Collection Class"
Section 5.3.4, "JDK 1.5 Enums are Not Supported by the 10.1.3 JAX RPC"
Section 5.3.5, "Throwable Class as a Bean Property is Not Supported by JAX-RPC"
The WSIF ant
tool does not support WSDL generation for EJB 3.0-based JARs.
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"
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
.
JDK 1.5 enums are not supported by the 10.1.3 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; }
This section describes the following issues and workarounds:
Section 5.4.1, "Cannot Create a Simple Task Form By Right-Clicking the .task File"
Section 5.4.2, "Tasks Attachments Cannot Be Added from Actionable E-mails"
Section 5.4.4, "Changes to Task and Routing Customizations Require Regeneration of the Scope"
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:
Right-click the human task folder.
Select Delete Task Form Files.
Generate the new task form.
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.
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
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
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>
This section describes the following issues and workarounds:
Section 5.5.1, "No Warning on Mapping Recursive Nodes that Exist in Source and Target Schemas"
Section 5.5.2, "Empty XSL Map Generated when Automapping a Recursive Schema with Restrictions"
Section 5.5.3, "XML Schema Expansion Depth is Not Obeyed When Resolving a Recursive Schema"
Section 5.5.4, "XSL Does Not Recognize Remote Source and Target XSD Files"
Section 5.5.6, "SampleExtensionFunction.jar File Must Be Copied to a Different Location"
Section 5.5.7, "application.xml File Containins ^M Characters"
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.
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.
The XML schema expansion depth is not obeyed when resolving a recursive schema. For example, perform the following steps.
From the Tools main menu, select Preferences > XSL Maps.
In the Expansion Depth field, enter a high value (for example, 20
).
In the Number of Repeating Elements field, enter 20
.
In the Maximum Depth field, enter 20
.
Attempt to map the recursive schema from source to target.
Right-click the source root node and select Expand All. The schema expands until only the default level (six nodes).
Close and reopen the XSL map in Design view. Only the default level appears.
Restart Oracle JDeveloper. Only the default level appears.
Manually expand the schema to ten levels and automap from the source to target root nodes.
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.
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.
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.
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
).
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.
This section describes the following issues and workarounds:
Section 5.6.1, "Processes Are Not Loaded If the orabpel Application is Stopped and Started"
Section 5.6.4, "Calculating Settings for Automatic Recovery Parameters"
Section 5.6.5, "Deployment with ant Fails when Default oc4jadmin User Password Is Not Used"
Section 5.6.6, "PermGen Out-of-Memory Error During Deployment"
Section 5.6.8, "Flow Trace Is Empty When a Fault Is Not Captured"
Section 5.6.9, "Recovery (Activity) Tab in Oracle BPEL Control is Disabled"
Section 5.6.10, "Optimized Assign Nodes Collapse Feature Is Not Supported in Oracle BPEL Control"
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.
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.
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.
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.
Install Oracle SOA Suite 10.1.3.1. During installation, specify the oc4jadmin
password as anything other than welcome1
.
Apply patch set 10.1.3.5.
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.
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:
Open the $ORACLE_HOME/opmn/conf/opmn.xml
file for UNIX or the ORACLE_HOME
\opmn\conf\opmn.xml
file for Windows.
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
.
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.
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.
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.
The optimized assign nodes collapse feature in Oracle BPEL Control instance tracking has been removed in this release.
This section describes the following issues and workarounds:
Section 5.7.3, "Removing Samples Installed in Releases Prior to 10.1.3.5"
Section 5.7.6, "Displaying the Fields in a Simple Task Form as a List of Values"
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.
Click Source to display the source view of the BPEL process.
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.
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.
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.
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.
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
.
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
.
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
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>
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>
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>
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
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>
This section describes the following new features and bug fixes:
Section 5.8.1, "Extending Response Header Handler Functionality to Throw Faults"
Section 5.8.2, "Caching of a Partner Link Endpoint URL that Uses UDDI"
Section 5.8.4, "Debugging BPEL Processes and Instances from Oracle BPEL Control"
Section 5.8.6, "Disabling the OK and Apply Buttons While Loading Remote XSD Files"
Section 5.8.7, "Specifying a Newly Deployed Process as the Default Revision"
Section 5.8.8, "Interoperability Support Between Oracle SOA Suites 10.1.3.5 and 11g"
Section 5.8.10, "Transformation Updates Correctly Reflected at Runtime"
Section 5.8.13, "Migrating In-flight Instances for Changed BPEL Processes"
Section 5.8.14, "Preventing Duplicate Recovery of Instances"
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>
You can now cache a partner link endpoint URL that uses UDDI. To use this feature, perform the following steps.
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.
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.
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:
The creditRatingService
partner link policy is applied first.
If a policy is not defined for that particular partner link, the process name policy takes effect (LoanFlow
and AutoLoanFlow
in the preceding sample).
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
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.
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:
Log in to Oracle BPEL Control.
Select the Configuration tab.
A Debug subtab now appears under both the Instances tab and the Processes tab in Oracle BPEL Control.
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.Log in to Oracle BPEL Control.
Click the Processes tab.
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.
Click the Debug subtab.
Select BPEL activities on which to set breakpoints. You can select multiple activities by pressing the Ctrl key and making additional selections.
In the Debugger control panel on the right side, click the Set Breakpoint icon (second icon) to set breakpoints on activities.
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.
Remove a breakpoint by selecting it in the Breakpoints section and clicking the Clear Breakpoint icon (third icon).
In the Debugger control panel, click the Set Trap Count icon (first icon) to set a trap count value.
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.
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.
Remove a breakpoint by selecting it in the Breakpoints section and clicking the Clear Breakpoint icon (third icon).
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.
Click the ? icon (fifth icon) to display online Help for the tasks that you can perform on this page.
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.
Log in to Oracle BPEL Control.
Click the Instances tab.
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.
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.
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.
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.
The icons that display left to right are described in the following table.
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.
Click the variable name in the list to display its contents.
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.
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.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 |
|
|
Process |
|
|
Instance |
|
|
Recovery |
|
|
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) |
|
|
Engine notification variables (engine) |
|
|
Process notification variables (process) |
|
|
Instance notification variables (instance) |
|
|
Automatic recovery agent variables (recovery) |
|
|
The XSD file (bpel_notification.xsd
) is located in SOA_Home
/bpel/system/xmllib
.
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.
Access the following URL:
http://archive.apache.org/dist/velocity/engine/1.5/
Download velocity-dep-1.5.jar
.
Accept the Apache licensing agreement to use the BPEL notification feature.
Place the JAR file in $Oracle_Home/bpel/lib
for UNIX or Oracle_Home
\bpel\lib
for Windows.
Restart Oracle BPEL Server.
This enables the BPEL notification feature to display in Oracle BPEL Control.
Log in to Oracle BPEL Control.
Click the Configuration tab.
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.
Click Apply to apply any changes.
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.
Click the online Help link Predefined template variables for descriptions of variables and examples of values.
Click Apply when complete.
Click the Configuration tab.
Scroll down and configure the SMTP server with values appropriate to your environment.
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:
Go to Configuration > Notification in Oracle BPEL Control.
Disable notifications, and click Apply.
Enable notifications, and click Apply.
or
Restart Oracle BPEL Server.
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.
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.
Open the SOA_HOME
\bpel\domains\
domain_name
\config\domain.xml
file for the domain in which to change this property.
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>
Save and close the file.
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.
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
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.
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:
Add the configuration property processDeployAsDefault=false
in the domain.xml
file.
Restart Oracle BPEL Server.
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.
Enter the following command:
ant -Drev 2.0
Revision 1.0
remains the default revision.
Enter the following command:
ant -Drev 3.0 -DdefaultRevision true
Revision 3.0
becomes the default revision.
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.
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.
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.
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 creatingant
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 andant
Create a new file named wsif-ejb-tool.xml
in the SOA_HOME
\bpel\system
directory.
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>
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>
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 theGenerateBeanDefinition
and GenerateWSDL
tasks. For instructions, see Section 5.9.9, "ant Bean Definition Generation Error Occurs If the EJB Has a Collection Class."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>
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>
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>
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>
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:
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
).
Search for <shared-library name="oracle.bpel.common" version="10.1.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).
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 |
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.
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:
|
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.
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.Log in to Oracle BPEL Control.
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.
Click the Processes tab.
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.Click Migrate Process Instances at the bottom of the page.
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.
Click the Instances tab.
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.Click Migrate at the bottom of the page.
Go to Step 3.
From the Audit or Flow tab of a specific BPEL instance:
Click Migrate.
Go to Step 3.
View the Migration page.
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.From the dropdown list in the destination tree, select the version to which to migrate. For this example, revision 2.0 is selected.
From the source process definition, select activities from which to migrate. For example, select a receive activity.
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.
To disable activities for migration, select the plus icon for the activity in the middle column.
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.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.
Enter a name for the file to which to save the mappings, and click OK.
Click OK when prompted to confirm the name and location of the template.
Click Migration Maps.
A list of saved maps is displayed.
Select the map to use.
Click Migrate Instances to create the destination instance.
Review the message that displays and click Migrate. The migration mapping is saved for later use.
The following message is displayed.
Click OK.
If you want to view specific details about the migration, click Show Log.
Click the Instances tab.
Click the destination instance to which you migrated.
Click Flow.
Note that the destination revision includes a link to the flow trace of the old revision.
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.
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.
Open the $ORACLE_HOME/Apache/Apache/conf/mod_oc4j.conf
file.
Add add Oc4jSet
flush
true
inside the tag IfModule
mod_oc4j.c
.
<IfModule mod_oc4j.c>
Oc4jSet flush true
</IfModule>
Restart Oracle HTTP Server to enable the configuration change.
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.
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.
This section describes issues and workarounds specific to using Oracle SOA Suite with Oracle WebLogic Server:
Section 5.9.1, "Recompiling Invalid Objects After Applying the Upgrade Script"
Section 5.9.2, "OC4J Configuration File Described in the BPEL Sample Files"
Section 5.9.4, "Configuring the File Adapter for Clustered Environments"
Section 5.9.7, "OrderBooking Tutorial Deployment Fails with ant"
Section 5.9.9, "ant Bean Definition Generation Error Occurs If the EJB Has a Collection Class"
Section 5.9.10, "TaskManager Not Displaying as a Deployed Process in Oracle BPEL Control"
Section 5.9.11, "Domain Picker Page is Displayed Even When Only One Domain is Available"
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.
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%';
Run the same command as the oraesb
user to display all invalid objects in the oraesb
schema.
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.
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 theorabpel
or oraesb
user. You may need to run this script as the sys
user.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
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.
Stop the managed Oracle WebLogic Server.
Back up the existing $ORACLE_HOME/bpel/system/services/config/is_config.xml
file.
Copy $ORACLE_HOME
/bpel/system/services/config/ldap/is_config_for_OID.xml
to $ORACLE_HOME
/bpel/system/services/config/is_config.xml
.
Update is_config.xml
to point to a valid Oracle Internet Directory repository.
Back up the existing $ORACLE_HOME
/j2ee/home/config/jazn.xml
file to jazn.xml.orig
in the same location.
Open $ORACLE_HOME
/j2ee/home/config/jazn.xml
.
Comment out the section that uses the XML provider.
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>
Restart the managed Oracle WebLogic Server.
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.
Open the $ORACLE_HOME
/soa/connectors/FileAdapter/META-INF/weblogic-ra.xml
file.
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>
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.
Open the bpel.xml
file for the project.
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>
Open the following files:
AutoLoanFlow\decisionservices\CreditRatingAgent\ear\META-INF\application.xml
AutoLoanFlow\decisionservices\LoanAdvisorAgent\ear\META-INF\application.xml
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>
Deployment of the auto loan demo can cause errors in the deployDecisionServices
target.
As a workaround, perform the following steps:
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.
Deploy the auto loan demo with ant
instead of obant.sh
.
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
.
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.
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.
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>
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."
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:
Stop Oracle BPEL Control.
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.
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"/>
Restart Oracle BPEL Control.
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.