Thursday, April 08, 2010

SOA 11g: Migration FAQ / Best practice

Migration projects from SOA 10g to SOA 11g is not a walk-in-the-park. You should read the migration documentation for the SOA 11g migration carefully. During your migration you would run into behaviours that you did not expect.

Use fully qualified names
During configuraton of the SOA domain, make sure you use the fully qualified name as specified in your DNS server. Some servers are using the short-name that is binded to the localhost (127.0.0.x) IP adres.

BPEL Compiler stricter
WIth SOA 11g patch set #2, the SCA runtime engine is more stricter. During testing of your SCA, that was created with patch set #1, you could run into runtime 'Selection errors'. One case is that you should check your Assign and Switch cases. You could have programmed to select the first node of an XML message:

/outputCollection/Order/Orderline/price

During runtime this selection failes, multi-node result. You should chnage your code into

/outputCollection/Order/Orderline[1]/price

Use abstract services
A SOA 10g project can be migrated via JDeveloper. But it migrates 1:1. If the BPEL process is calling another BPEL process (10g), after migration the new 11g composite is still calling the BPEL 10g process. You must change this manually.
Alternatively you could use abstract WSDL. This will decouple the calling BPEL process. Therefore you must also make some changes in your BPEL or ESB services, before you migrate.

HTTP 503 error during deployment
Follow the instructions at http://soa-bpel-esb.blogspot.com/2009/08/oracletiptoolsidefabricdeploycommonsoar.html to solve this issue.

Error: TopLink deployment descriptor generation failed
During deployment you get this Toplink error. Please verify that reported problems are corrected and that the deployment descriptor path and name are valid.
The issue is in the JDeveloper .JPR file. An oracle.toplink.addin.TopLinkProjectSettings section is this file, remove the section and the deployment should work.

Composite WSDLs are not loaded during startup of JDeveloper
In some cases JDeveloper can not load the external WSDL that is used in your composite. This occurs when an composite.xml file is 'open' when you close JDeveloper the previous time. The workaround is, off course, to close all 'compiste.xml' tabs before shutting down JDeveloper.

BPEL Migration fails with special characters
If your 10g SOA project contains special characters like é or  ï, the project fails after migration. Remove these characters before migrating your projects.

RuntimeFault.wsdlcan not be found
The http://localhost:80/orabpel/xmllib/RuntimeFault.wsdl can not be found after migration. The location of these files are moved to the MDS. Change this location manually in your code to oramds:/soa/shared/bpel/RuntimeFault.wsdl

java.lang.Exception: oracle.sysman.emSDK.webservices.wsdlapi.SoapTestException: null 
An error occurs when you are using the 'count' function with getVariableData. Use the function 'oracountNodes' instead of this one.

see also Metalink Note 1059573.1 APPLYING COUNT XPATH FUNCTION TO bpws:getVariableData RESULTS IN SELECTIONFAILURE FAULT

Selectionfailure on empty element
During a test activity such as string(bpws:getVariableData('creditcardLimit')) != '' will fail. This can be solved by using countNodes functionality: ora:countNodes('transactienummer') > 0

BPEL Preferences
Changing the BPEL preferences is now done via Enterprise Manager with the MBean browser. See the article.

http://eelzinga.wordpress.com/2009/10/28/oracle-soa-suite-11g-setting-and-getting-preferences/

java.lang.IllegalArgumentException
An error is generated:

"java.lang.IllegalArgumentException: Error occurred while attempting to retrieve message part ... from a normalized message payload with elements ..."

During migration of the ESB services that are not using a transformation for mapping the request and reply messages, the migration tool is NOT adding a Reply mapping. This only occurs when the request message and the reply message using different part names.

This can be solved by creating the Reply mapping manully via the assign 

Unable to register service.
After restart of the server you could get:

Unable to register service. oracle.fabric.common.FabricException: Error in getting XML input stream: : Response: '503: Service Unavailable' for url:
 

This occurs that the composite is pointing to a WSDL of another service. This pointer should be a abstract WSDL.

Base64 encoding/decoding does not compile
An error occurs "Error(17,39): Failed to compile bpel generated classes. failure to compile the generated BPEL classes for BPEL process ... The class path setting is incorrect. Ensure that the class path is set correctly. If this happens on the server side, verify that the custom classes or jars which this BPEL process is depending on are deployed correctly..." This can be solved by adding importing the oracle.soa.common.util packaged instead of the com.collaxa.common.util
 

FTP adapter header variable

The FTP Adpater is using the bpelx:headerVariable as directory or filename setting. This variable can be set on the Invoke or Recevice activity via a property.

If I missed something or you have anything to add, please send me a mail or put it in the comments.


Post a Comment