Custom Search SOABYTE here

Friday, April 9, 2010

Troubleshooting and Workarounds

Transaction Management

Use Bpelx:rollback

Connection pooling configurations not working as per expectations. If the pool was set to 10 at ra.xml level, there was still latency observed at process level when establishing connection

The max connection settings at pool level were less than the max connection setting at ra.xml level.Connection Configurations at ra.xml level should be less than the configuration at the data source level

Enqueuing and dequeuing failed at times    

Having separate Resource Providers for Enqueuing and Dequeuing a message from AQ JMS queues/topics resolved the problem

The deployment plan file replaced host names post compilation. This caused issues as some of the host names still pointed to an earlier server where the wsdls' xsds' were not up to date.

Changed the Deployment script to not use the plan file, and perform the search and replace task prior to compilation

FOTY Error -  There is no detailed explaination why this error occurs. It can occur due to multiple reasons.The error log also does not provide any clarity on the error. It typical happens when an xpath expression within an XSLT cannot be evaluated or there is a namespace issue.

Devised a set of steps to followed using elimination by trial and error to find the cause of the error.

Performance Issue due to the usage of while loops in BPEL process. When the payload is of the order of 1 + MB xml, excessive looping due to while is a cause for performance degradation.

Converting while into a single xsl and using xsl:for-each in it to loop through the intended repetitive element

Optimization of Switch Case condition in BPEL Processes - Use of expression "count(nodes) > 0" to check if any node existed caused performance issues when there are too many nodes to count.

The Switch condition should be such that a true or false gets returned from the condition execution within fraction of a second. So we optimized the condition to "string-length(node/Xxfield) != 0" where Xxfield is some mandatory field and hence we can vouch for its presence always and base the checking of one node atleast on this element's existence.

JMS Adapter on the Outbound does not publish the message when the input message reaches a certain limit(15MB).

There is a limitation on the size of message that JMS Adapter can support and they will be coming out with a note on that

Need a database sequence to be used when inserting records into database. Tried doing this from the XSLT, but this approach established a connection everytime a call was made. This impacted performance in case of large batches of data that were inserted.

Used the toplink file instead to update the sequence when inserting. This required manual changes to the toplink file as there is no provision in the wizard for allowing usage of a database sequence.

The ESB filter condition does not work at line level.

Used the transformation mapping in ESB to route the message to a routing service.Then applied filter condition to route it to the target.In all,one extra routing service was used.

When trying to publish to a AQJMS queue on the different schema of the BPEL database using a JMS Adapter with a BPEL process

the following error is displayed and the message is not published with error containing following text.                                                                                                                 ERRJMS_IX_INVALID_SPEC - AQJMS

- Removal of jmsadapter.jar entry on server.xml (not part of the original instalation)
 - Removal of jmsadapter.jar from applib/ folder (not part of the original instalation)
 - on JmsAdapter/oc4j-ra.xml set isTransacted to true (as per manual)
 - on the creation of the Data Source set to local transactions only (manual does not include creation of data-sources - uses

direct application.xml connection)\line - removal of mcf properties on the JmsAdapter.wsdl of the BPEL process (as per wsdl

- removal of the AQ username on the JmsAdapter.wsdl to make it database independent (not documented)
Cannot Register ESB Using JDEVELOPER if Workspace Name is Changed.This happens when you change the workspace name for your ESB service and rebuild your project again.Refer metalink note [ID 875558.1].

The problem can be solved by maually editing *.esbsvc  files.Check wsdl urls in *.esbsvc files and give the local reference for the wsdls(.wsdl).If you rebuild your project again,cross check *.esbsvc files again.

MQ Adapter XA config issue

Add manually this config-property () into $ORACLE_HOME/j2ee//application-deployments/default/MQSeriesAdapter/oc4j-ra.xml.The mq client jar files need to be placed on SOA Server.

In our Oracle SOA SUITE we are using BPEL Process to invoke the Java class using WSIF binding. Intern this Java class publishes the message to weblogic JMS Queue/Topic. To make it work Java requires wlfullclient.jar (created by weblogic utility) to communicate between Oracle SOA SUITE and Weblogic.

The entry for wlfullclient.jar for oc4j_soa instance is added in the shared library "oracle.bpel.common" availble in server.xml.

And we are invoking 'Oracle Business Rule' from another BPEL Process and getting error "duplication of javax.xml.rpc.soap.SOAPFaultException".

wlthinclient.jar resolved the issue. Now, BPEL is able to invoke for both business rule and weblogic.

Oracle Application Adapter is returning NULL from a wrapper PL/SQL procedure on a clustered env.

The DB/Apps returns were ok and the JMS interface was working as well after removing this from server.xml:

.The problem is due to bug 8493295 - classloader issue after adding weblogic.jar in server.xml and bug 8296353 - orabpel-12511 adapter framework unable to create - oc4j jms adapter to wls queue. This is fixed in MLR#8 - the base bug is 8296353. You should have no problems with the JMS adapters as long as you continue to keep the WLS library in the JMS connectors directory as you already have it. The additional reference in server.xml caused the xparserv2.jar to be overwritten for BPEL so that the xerces parser was being used instead.

Outbound JCA Connection on Clustered Environment.

1. Stop you container
2. Open the $SOA_Oracle_Home\j2ee\home\config\transaction-manager.xml file
3. Change the value of transaction-timeout property to 45
4. Start your container                                                                  The solution will need to be adjusted in case the environment's performance level changes. The transaction timeout will need to be tuned accordingly with the performance changes. This is part of normal system tuning.
- The solution provided uses only local transaction since the jdbc driver used, oracle.jdbc.pool.OracleDataSource, doesn't support XA.                                                                                                                                  
Produce JMS message to AQ using standalone Java client

Able to enqueue from standalone java client after adding the lines :
db_url=jdbc:oracle:thin:@ to the JNDI properties."Stand-alone WebLogic AQ JMS Clients" and "Configure a Foreign Server using a Database's JDBC URL "

Its says that if we are using a stand alone then we would have to give these two things in. However when once we also tried the same steps without these two things foreign server was not working fine and when we added as its shown in "Configure a Foreign Server using a Database's JDBC URL " only then foreign server was working fine, hence it seems that these two parameters are necessary.

When trying to publish a message from a BPEL process into a RIB topic (a predefined AQ JMS) the same
doesn't get published.
The BPEL process (uploaded) does not throw any error but when tracing the JMS connection on
default_group_oc4j_soa_default_group1.log (uploaded) using
-Doracle.jms.traceLevel=5 as a oc4j_soa server property the following error

pool-2-thread-1 [Wed Jun 10 13:22:37 BST 2009] AQjmsProducer.enqueue-ex: Exception: java.sql.SQLException: ORA-24033: no
recipients for message
ORA-06512: at "SYS.DBMS_AQIN", line 345
ORA-06512: at "SYS.DBMS_AQIN", line 1201
ORA-06512: at "SYS.DBMS_AQIN", line 1299
ORA-06512: at line 1

The JmsHeader variable on the BPEL process wasn't being assigned to the partner link
(JmsAdapter).The name of the JmsHeader was set as threadNum when it should be set as threadValue.


Luiz said...

Add in your BPEL process invoke activity the element:
<bpelx:inputProperty name="jca.jms.JMSProperty.threadValue"

Marcus said...

Your hint about the threadValue parameter when getting the ORA-24033 error pointed me in the right direction.

Post a Comment

Blogger Profile