Aync Queries - OO4O and Wizards(Archived)

Has anyone tried async processing. Also does anyone get a 24333 error randomly if trying async.


Reading AQ messages in sequencing order.

In order to make sure that the BPEL process reads the messages from the queue in a sequence. There were two things suggested in some document.
1. Make sure the Actication Adapter is configured to run only one oc4j instance inside the BPEL Cluster
2. When creating the Adapter make sure to set retry deplay as 0
Does any body has any ides where we can do this? I couldn't figure out both of them.
My understanding of how this works, is that messages would always be dequeued from the AQ in their sequenced order. The behaviour you are probably seeing, is because the BPEL adapter then delivers to them to BPEL processes and they are processed concurrently. So you've got no guarantee that process 1 will complete before process 2.
Do you need an instance to finish and complete before the next instance starts? If so, you can design that, but you will not get performance as high as if you are processing queue messages concurrently.

How to handle messages correlated to a terminated process

In WLI 8.5, I have a process sending messages to a request queue (thanks to a WLI JMS control), and receiving message in a response queue (thanks to the same WLI JMS control).
The external process performing the work, reads messages from the request queue and publishes correlated responses. Those correlated responses can trigger the right process. This part works fine.
But if the response doesn’t arrive in due time, there is a timeout path, the process continues and terminates gracefully.
If a correlated message arrives on a terminated process, I have ConversationNotFoundException in the console. I’d like to handle them in order to send a too late message to the sender.
How should I proceed?
I cannot catch the ConversationNotFoundException(s) in the terminated process.
How can I catch them ?
If I put an error queue to my response queue, I won’t be able to discriminate between ConversationNotFoundException and other delivery errors. What is the best practise to handle this case? 
We had a similar issue encountered and there were a few observations by BEA support on this exception that are generic I think, so this may help you:
(Are you using a JMS Control as the explanation involves them and more importantly, a cluster!)
There are some architectural implications of using a jms control in a cluster, where the message flow is bidirectional.
The ConversationNotFoundException would in this case be a consequence of the fact that our automatic jms control machinery has lost track of the exact jpd instance that it is receiving a mesage from. This automatic machinery is that the jms correlation-id = the conversation-id= the jpd instanceid
see http://e-docs.bea.com/workshop/docs81/doc/en/workshop/javadoc-tag/jc/jms.html, but in a cluster environment, it could be mix up and not work like that.
So regarding your question if you can program a specific message to send when this error occurs, it looks difficult as it seems your JPD is now out of the picture and hence no logic would handle this scenario.
Nevertheless, I will watch this space for other suggestions as a workaround. 
Further case notes on similar issue:

Is is feasible to wrap async bpel with a sync BPEL?

Hello Folks, I have a question here, just want to know if we can wrap a async BPEL(with default method of process and callback methods ) with  a sync bpel?When tried i faced timeout errors in receive activity of sync process. I understand the whole concept of timeouts, threads involved etc. My question is, Is it that a pattern should never be designed in such a way? If there is a consumer who wants it in Sync manner but we have a provider in async manner ..how can we integrate these two systems without the use of JMS or any messing system? Cheers,Prakash
The idea doesn't seems feasible. Synchronous process are used to get a response immediately(in fraction of seconds) When you say asynchronous process there is no time bound for the response so basically binding the synchronous reply with a non synchronous reply does make much sense. you can store the result of asynchronous process in a temp variable and hard code the value. But to be precise it is not a great idea to call a async process from a Sync one
Thanks for your response. I understand everything you said. My question is still open. If there is a consumer who wants a service sync way but we have a provider who provides in async manner ..how can we integrate these two systems without the use of JMS or any messing system? However the async response SLA is agreed well within the sync time out settings.  Lets say the async response will be back in 10 secs in such cases we can still wrap it around with a sync process time out. But technically how do we achieve this using Oracle Fusion stack.
there is a property called syncMaxWaitTime in BPEL  Login into EM Console/Expand SOA and right click on "soa-infra" and select: SOA Administration/BPEL Properties/"More BPEL Configuration Properties/syncMaxWaitTimeBy default your synchronous bpel process time outin the the time specified for this property.So if you know your async process is going to respond in 10 second you can set this property to a higher value (15 seconds) which is again not a recommended value as Sync process should complete is fraction of seconds.
Appreciate your response. But it doesn't work.BTW default sync max wait time is 45 seconds.
Hi, Technicaly, yes you can do it.A sync BPEL can wrap an async BPEL (which part doesn't work for you ?). But, you will encounter a timeout issue if the async BPEL does not respond quickly enough compared to the timeout setting. Although it is technicaly feasible, this is a little risky especialy for services which are not read-only. You could have a sucessful execution of the service (create a new customer) but the web-service consumer might receive a timeout exception. Will it try to recreate the same new customer because it doesn't know it was successfuly created ? regards,mathieu
Hi Mathieu,Thanks for your response.I tried to do that with a call back async BPEL and still I see the async BPEL completed in less than 2 secs and sync BPEL which invokes it waits for ever. Regards,Prakash 
This is tipicaly an error on the "correlation". How did you set it up in order to correlate the response of the Async BPEL to the right instance of the parent BPEL ?Which binding is involved in the Async call ? regards,mathieu
Hi Mathieu, I tried setting a correlation id and propagated the id to and back from async process to sync process. Still its timing out in receive.Normal SOAP binding since its within the same BPEL engine it will apply WSIF to invoke. HiAnuj Dwivedi--Oracle ..do you think its possible? Please have a look my question on top of this discussion.  Regards,Prakash
Hi Folks, Still waiting for some solution in this case. Regards,Prakash
Hi Prakash, I've made some suggestion in the new forum thread: Re: Wrap async BPEL with a Sync BPEL. Is it possible? I hope it fits your needs. Regards,Luis Fernando Heckler
Folks, the answer is in the below post. Thanks Luis. ttps://forums.oracle.com/message/11102055#11102055

How to exclude a specific remoteFault from AIA Error Handling?

Originally our system only had messages in the AIA JMS error topic that we had put there using the AIAAsyncErrorHandlingBPELProcess.   Recently we started seeing all run time faults, even if we did not call the process.  After I did some research it seems that this is the desired behavior.  The problem is that several services that we call return faults that can be safely ignored.  The largest offender is MQ's 2033 (No messages on queue) error.  There are also various staging tables and web services that return errors we can safely ignore.  Previously we were catching those remote faults via a scope around the invoke, checking the message, and either ignoring it or re-throwing it as appropriate. We haven't decided if we want to re-disable this feature (and I found out how anyway).  I'm trying to figure out my options.  So far I've come up with: 1) Put an IF in our custom BPEL that subscribes to the aiaErrorTopic to exclude any faults that we do not wish to be notified about.   I've done this, but it seems like it will become cumbersome quickly2) Figure out a way to catch a fault in the policy file and return something else (empty result set element or general success message depending on what is appropriate)3) Figure out a way to exclude all remote faults from being auto enqueued to the JMS topic, still throw the fault to be caught in the BPEL, and have them only enqueued via us catching the error and calling AIAAsyncErrorHandlingBPELProcess I've found plenty of documentation on the error handler, but everything assumes that you want the fault logged and you want to throw a fault. Any thoughts, ideas, or recommendations? ThanksChris edit: Btw, we're using currently

Dequeue message from AQ only after one is completely processed in a cluster environment

We have a business scenario where we need to sync two ERP systems and we are trying to use Oracle Service Bus 11g as middleware for achieving this. The requirement is as below:System A would publish the messages using Advance Queue in a sequential order (the records are dependent on one another) OSB will process the message from the AQ and transform it to the target message formatOSB will call a stored procedure to update the data in system B.After processing, System B sends a response to OSBOSB updates the response back to system A We have a clustered environment and as part of the requirement we should process only one message at a time since the records are dependent. i.e., say we have two messages in the AQ, message two should be processed only after processing of message one is completed and status updated in system A. So wanted to check if anyone has encountered similar requirements in any previous experience or any pointers as to how this can be achieved?
Hi, I had a very similar concern once, but unfortunately, as OSB is stateless, it is unable to wait on another message to forward. The solution I came across was, instead of using only OSB, use SOA Suite altogether (with correlation sets), to store messages and then forward everything together. 
But then again: as I understand the question correctly Soumik expects that the dequeue is committed only if the response of System B is processed to System A. If that is done in an async response, then the AQ is already committed. Because a (async) receive on the response will cause (even in SOASuite) the request path to be committed. So I think/excpect you'll have to deal with two transactions. Unless you're able to do a synchronous request response to System B and handle the whole roundtrip synchronously in one XA transaction.Regards,Martien