cancel
Showing results for 
Search instead for 
Did you mean: 

BPM design - JDBC - SOAP - JDBC

Former Member
0 Kudos

Hi experts,

Business scenario - Pull the data from Data base using a Stored Procedure(this marks the records once it is successful) and call web service using this data. If web service call is success, push the response received from web service to Data Base. If call to web service fails, still push the data which was pulled initially from database back to same location in database.

Iam using BPM for this.

Block1 - get the data into BPM from Database (async), had an exception branch to check its success status and raise alert incase of failure.

if Block 1 is good.

Transform the data to Web service input format

Block2 - send the call to webservice Synchronous send step(request and response are defined as abstract asynchronous), had an exception branch to check if call is good or not, if the call is unsuccessful, write the data back to database

If block 2 is good,

Block3 - Response(abstract asynchronous ) recieved from webservice is transformed to Data base format and written to Data base using JDBC receiver adapter.

I would like to know if this design is good, can I use options like Async \ synch bridge here.

Please let me know your thoughts.

Accepted Solutions (0)

Answers (1)

Answers (1)

stefan_grube
Active Contributor
0 Kudos

I recommend using an asyc process. When webservice call fails, you can fix the issue and resend.

What prupose should it have to recover the db? The message will processed again and fail again.

VijayKonam
Active Contributor
0 Kudos

I would only suggest sync calls for qurying kind of interfaces. Everywhere else, async is the best mode of communication as in case of errors, you can reprocess..!!

VJ

Former Member
0 Kudos

When web service call failed the message is sitting in the queue and I could not restart it.

Coming to asynchronous call, do you mean I need use asynchronous send step to call web service and receive the response from web service in another asynchronous receiver step.

stefan_grube
Active Contributor
0 Kudos

> Coming to asynchronous call, do you mean I need use asynchronous send step to call web service and receive the response from web service in another asynchronous receiver step.

This is correct.

If you cannot change the webservice, you can this with a BPM, but the error handling in BPM should have reprocess options.

A sync interface is more likely to fail than an async interface.

Former Member
0 Kudos

I have an asynchronous send step now followed by receive step, but in receive step it is asking me Use Correlations.

I have defined a Correlation for the request and response. I have an element as common and getting filled in both revues and response. So I have selected that as Correlation Container element, under involved messages - selected request and response messages, under Properties I have selected the element name, using XPATH.

Now When I want to select this correlation in asynchronous send step and receive step, it shows in my drop down , when I select and save it , it is vanishing. I could not see the correlation I selected , it shows empty.

Did I miss anything.

stefan_grube
Active Contributor
0 Kudos

I think your scenario should be:

receive (async) - send (sync) - send (async)

I do not see a need for a correlation.

Or did you change your original approach?

Former Member
0 Kudos

Stefan,

I thought you suggested to call web service asynchronously using a async send step followed by asynch receive step.

If I stick to my original approach -> receive (async) - send (sync) web service call - send (async), as I said earlier when web service is down, eventhough I have exception branch for synchronous send step, exception was not caught as Iam getting Application error back and message is not restartable.

Another Info.. Iam using AXIS adapter to call web service, the reason we are using Data Power between XI and external web service. Communication between XI and Data Power needs to be two way SSL.

Former Member
0 Kudos

You should follow the design as Stefan suggested.

If the web service is down, you won't be able to re-start the message from PI as it will be a sync step.

Former Member
0 Kudos

thank you for all your views.

Stefan suggested initially to call the web service asynchronously and receive the response from web service in another receive step . When I do that receive step is asking me to have a correlation, eventhough I created a correlation it is vanishing when I save it.

May be I could not understand it correctly.

are these steps are good.

BPM process -

Block 1 - ( to ge the data from data base) Asyn Receive step ,

Block2 - Asynch Send step (to call web service), Aynch receive step(to receive the response from web service ), exception branch (for web service call failures)

Block3 - send step to send the response received from web service to Data base.

Former Member
0 Kudos

Nope, I was referring to this design - JDBC Async -> PI -> SOAP Sync -> PI -> JDBC Async.

No need to maintain correlation in this design.

Former Member
0 Kudos

But the issue in this design is

when web service is down, eventhough I have exception branch for synchronous send step, exception was not caught as Iam getting Application error back and message is not restartable.

Former Member
0 Kudos

when web service is down, eventhough I have exception branch for synchronous send step, exception was not caught as Iam getting Application error back and message is not restartable.

You can use this parameter in SOAP receiver channel to grab the SOAP fault message :-

"XMBWS.NoSOAPIgnoreStatusCode" = true in receiver SOAP channel -> Module tab -> module configuration -> module key = soap.

No matter what, you can't re-start a failed sync message from PI (if the failure is due to the application / system error).

Former Member
0 Kudos

Iam using AXIS adapter to call web service, the reason we are using Data Power between XI and external web service. Communication between XI and Data Power needs to be two way SSL.