ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Interchange Server + Adapters » JDBC Adapter - Insert or Update

Post new topic  Reply to topic
 JDBC Adapter - Insert or Update « View previous topic :: View next topic » 
Author Message
PravinG
PostPosted: Wed Nov 28, 2007 3:39 am    Post subject: JDBC Adapter - Insert or Update Reply with quote

Newbie

Joined: 16 Oct 2006
Posts: 9
Location: India

Hi,

We are working on JDBC Adapter. Adapter is working fine for verbs Create,Update and Delete. But in some of our requirements we dont know whether the data (with some primary key) is present in the respective table or not. We want to update the data if its present already. Else we want to insert the data.

Can we have some kind of check/dynamic verb in JDBC Adapter by which we can have a processing like - "If data with that key is present in the table then update else insert" ?

In oracle we use merge statement for such cases.

I am sure I am not the first one to have this problem. Has anyone faced this issue before ? What could be the best approach to go with this ?

Thanks,
Pravin.
Back to top
View user's profile Send private message
Gaya3
PostPosted: Wed Nov 28, 2007 4:29 am    Post subject: Reply with quote

Jedi

Joined: 12 Sep 2006
Posts: 2493
Location: Boston, US

Hi

Why can't you use Stored Procedure here...

JDBC Adapter has the option of triggering Stored Procedure.

hope this will work out for you

Regards
Gayathri
_________________
Regards
Gayathri
-----------------------------------------------
Do Something Before you Die
Back to top
View user's profile Send private message
eai_guy
PostPosted: Wed Nov 28, 2007 4:53 am    Post subject: Reply with quote

Voyager

Joined: 18 Oct 2007
Posts: 90

Why dont you do this in your collaboration logic ??

First send the retieve verb to check if the data exists,

if data exists
send update verb,
else
send create verb.
Back to top
View user's profile Send private message
Gaya3
PostPosted: Wed Nov 28, 2007 5:32 am    Post subject: Reply with quote

Jedi

Joined: 12 Sep 2006
Posts: 2493
Location: Boston, US

Hi eai_guy

But here we are not sure, PravinG is using ICS to do so.

from the performance view, do you think that checking from collaboration logic is feasible. Indeed its giving some load...

Regards
Gayathri
_________________
Regards
Gayathri
-----------------------------------------------
Do Something Before you Die
Back to top
View user's profile Send private message
PravinG
PostPosted: Wed Nov 28, 2007 7:56 am    Post subject: Reply with quote

Newbie

Joined: 16 Oct 2006
Posts: 9
Location: India

Thanks both of you.

We are using WBI Message Broker (V6.0) with JDBC Adapter.

We are not having enough knowledge abt using Stored Procedure with JDBC Adapter. Now we are exploring that option also.

But just one basic doubt:
We have to insert the data into 250+ tables for a single input message. So that way we have to write that much queries/stored procedures. Also we dont have administrative control on DB part of this project. So we dont know if we can get the approval on using Stored Procedures. Again maintenance will be an issue there.

So we are trying one more way. In our Error flow-message flow, we are checking our error queue (which is JDBC FAULT queue) for failed messages. If the reason for failed message matches with that of 'primary key violation' or 'data with this primary key not found in the table' then we are changing the verb and sending the data again to the JDBC input queue.
The ESQL extract for doing this is as below:

-----------------------------------------------
-- Database update failure because the data with this primary key is not present
IF InputRoot.MRM.verb = 'Update'
AND POSITION('MsgID: 35030' IN InputRoot.MQRFH2.usr.Description) <> 0
AND POSITION('Mesg: Cannot find the business object '|| InputRoot.MQRFH2.mcd.Type ||' in the database with the key values received.' IN InputRoot.MQRFH2.usr.Description ) <> 0 THEN
SET OutputRoot = InputRoot;
SET OutputRoot.MRM.verb = 'Create';
SET OutputDestinationList.Destination.MQDestinationList.DestinationData.queueName = GetMQQueueName(InputRoot.MQRFH2.mcd.Type);
PROPAGATE TO TERMINAL 'out1';
-- Database insert failure because primary key violation error
ELSEIF InputRoot.MRM.verb = 'Create'
AND POSITION('MsgID: 37004' IN InputRoot.MQRFH2.usr.Description) <> 0
AND POSITION('ORA-00001' IN InputRoot.MQRFH2.usr.Description) <> 0 THEN
SET OutputRoot = InputRoot;
SET OutputRoot.MRM.verb = 'Update';
SET OutputDestinationList.Destination.MQDestinationList.DestinationData.queueName = GetMQQueueName(InputRoot.MQRFH2.mcd.Type);
PROPAGATE TO TERMINAL 'out1';
END IF;
--------------------------------------

Any comments whether this is OK ?

I know that this is not the best way of handling such issue but its working for me.
Also our project is in development phase and there are more and more chances that the database definitions can change in future. So instead of changing/maintaining 250 odd tables/stored procedures, I think this solves our purpose.

Experts comments please....

Thanks,
Pravin.
Back to top
View user's profile Send private message
eai_guy
PostPosted: Wed Nov 28, 2007 8:51 pm    Post subject: Reply with quote

Voyager

Joined: 18 Oct 2007
Posts: 90

Gaya3 wrote:
Hi eai_guy

But here we are not sure, PravinG is using ICS to do so.

from the performance view, do you think that checking from collaboration logic is feasible. Indeed its giving some load...

Regards
Gayathri


Hi Gayathri ,

He is not using ICS so cant go with collaboration approach......

As far as Insert or update is concerned using collboration will give some load.......
I dont see other way in ICS to have this check done(whether to insert or update)........ Do you foresee any other logic for this ?

I know this question is not relevant on this as the query is for using JDBC with MB..... Just asking out of curiosity

Thanks,
Back to top
View user's profile Send private message
Gaya3
PostPosted: Thu Nov 29, 2007 2:19 am    Post subject: Reply with quote

Jedi

Joined: 12 Sep 2006
Posts: 2493
Location: Boston, US

Hi

This is fine, but think if there are lakhs of messages failing due to the reason that you stated,

If you are using adapter, hand over any database transaction to Adapter, it will help to function your broker well with high performance. (esp:(Condition Checking etc))

Stored procedures are really powerful, there are lot of options available in that.

As the ESQL looks good, and as you said, its working fine for you. Its better to look forward a bit while designing.

eai_guy:

If you are using collboration and adapter, i suggest the above solution.
hand over to Adapter for functioning with Apps (Condition Checking etc)


Regards
Gayathri [/u]
_________________
Regards
Gayathri
-----------------------------------------------
Do Something Before you Die
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Thu Nov 29, 2007 3:01 am    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

The performance load for doing a select first should be small... and could be done from MB, by sending a retrieve message first.

It's probably okay to query one table for the primary key, so the retrieve will be fast.

Also, Gaya3... I think eai_guy is handing over all DB actions to adapter - WMB is just checking return message from adapter Update call to see if the error indicates it should send Insert call.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Interchange Server + Adapters » JDBC Adapter - Insert or Update
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.