Indika Shouldn't we always grab the return from the report into a fixed property?
Paul Harm Verhagen wrote: > filed as: > https://issues.apache.org/jira/browse/SYNAPSE-457 > > 2008/10/2 Indika Kumara <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> > > Hi Harm > > Yes, Harm, you are correct. With using current DB report , DB lookup > combination , there is no thread safe manner (clear) to retrieve > latest insert record's identity other than workarounds such as you did. > It may need a new abstraction, a DB report with return value > (Currently, DB report has void behavior), where return value can be > explicitly specify by a separate statement. > > It is great, if you could create a JIRA for this as an improvement. :-) > > Thanks > Indika > > Harm Verhagen wrote: >> Hi, >> >> I am seeing a similar problem when using mysql as db backend. >> /How to get the ID of a NEWLY INSERTED ROW ?/ >> >> *problem:* >> - I insert a new fow in a table with the dbreport module. It >> gets a new id. (it is an AUTO_INCREMENT variable). >> - further in my sequence, and in the 'out' sequence I need to >> update that row in the table, using the id. >> I couldn't find a clean (and threadsafe!!!) way to get the newly >> created id with wso2. >> >> The wso2 samples don't address this problem. >> >> mysql provides a function LAST_INSERT_ID() to get the newly >> inserted ID. However that can only be used in the *_same_* >> transaction. >> So I can use LAST_INSERT_ID() in the _same_ dbreport module (as >> 2nd or 3rd sql statement). However dbreport mediator CANNOT save >> this to a variable. (only dblookup can). >> A following dblookup mediator can however NOT use >> LAST_INSERT_ID() (it always returns zero, as this is a new db >> transaction). >> dblookup could do some MAX like magic... but thatis not threadsafe. >> >> *workaround* >> I found a (but-ugly) workaround: >> dbreport: >> sql1: insert into ..... (store my new row... >> creates a new ID). >> sql2: insert into transaction_uuid(id, uuid) >> values(LAST_INSERT_ID(),?) >> param: >> get-property('MessageID') (store the newly >> created ID in a new temp table, using the uuid of the message) >> dblookup: select id from transaction_uuid where uuid = ? >> param: get-property('MessageID') >> result: >> transaction_id ( read the newly >> created id from the temp table, store it in a variable). >> dbreport: delete from transaction_uuid where id = ? >> param: get-property('transaction_id') >> (delete the temp table). >> >> >From here on I can use get-property('transaction_id') to update >> the row in the same sequence, (and in the answer sequence). >> >> I would expect however that I can do the above with _one_ single >> dbreport mediator. Insert the new field, and store the id in >> set-property('transaction_id'). >> I didn't measure my workaround but it must be slow. (the hole >> temp table should be unneeded, the above contains 3 unneeded db >> accesses and 2 unneeded mediators). >> >> Do you see any way how wso2 could cleanly support this ? (Maybe >> an extension to the dbreport module ?) >> >> Regards, >> Harm >> >> >> 2008/10/2 Indika Kumara <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> >> >> Here, you had done two wrongs >> >> 1) The IDENTITY_VAL_LOCAL function has no input >> parameters. But, you have tried to set parameters – That is >> why you get exception. >> >> 2) You have called it in db report mediator. DB report >> mediator use to add /update record …simply uses >> executeUpdate(). But values IDENTITY_VAL_LOCAL() is for >> retrieving latest inserted record identity and will throws >> errors. >> >> Please use values IDENTITY_VAL_LOCAL() with DB LookUp >> mediator >> >> Thanks >> Indika >> >> Schmilinsky, Remsy wrote: >>> Thanks. I am trying to get the generated id after insert, I'm >>> using derby, with 'values IDENTITY_VAL_LOCAL()' in a >>> second sql but doesn't work, are these incompatible functions ? >>> >>> 2008-10-01 13:47:14,790 [169.254.7.221-WH24CU6052] >>> [jms-Worker-1] ERROR DBReportMediator Error execuring insert >>> statement : values IDENTITY_VAL_LOCAL() against DataSource : >>> jdbc:derby://localhost:1527/esbdb;create=false >>> java.sql.SQLException: The column position '1' is out of >>> range. The number of columns for this ResultSet is '0'. >>> at >>> >>> org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown >>> Source) >>> at >>> org.apache.derby.client.am.SqlException.getSQLException(Unknown >>> Source) >>> at >>> org.apache.derby.client.am.ColumnMetaData.getColumnType(Unknown >>> Source) >>> >>> the insert statement alone works though. >>> >>> here dbreport config, for the moment I assign value 1 to test >>> it out: >>> >>> <syn:dbreport> >>> <syn:connection> >>> <syn:pool> >>> >>> <syn:driver>org.apache.derby.jdbc.ClientDriver</syn:driver> >>> <syn:password>esb</syn:password> >>> <syn:user>esb</syn:user> >>> >>> <syn:url>jdbc:derby://localhost:1527/esbdb;create=false</syn:url> >>> </syn:pool> >>> </syn:connection> >>> <syn:statement> >>> <syn:sql><![CDATA[insert into sample values >>> (DEFAULT, ?)]]></syn:sql> >>> <syn:parameter >>> xmlns:ns1="http://org.apache.synapse/xsd" >>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >>> expression="//*/*" type="VARCHAR"/> >>> </syn:statement> >>> <syn:statement> >>> <syn:sql><![CDATA[values >>> IDENTITY_VAL_LOCAL()]]></syn:sql> >>> <syn:parameter value="1" type="INTEGER"/> >>> </syn:statement> >>> </syn:dbreport> >>> >>> remsy >>> >>> -----Original Message----- >>> *From:* [EMAIL PROTECTED] >>> <mailto:[EMAIL PROTECTED]> >>> [mailto:[EMAIL PROTECTED] Behalf Of >>> *Indika Kumara >>> *Sent:* October 1, 2008 1:21 PM >>> *To:* [email protected] <mailto:[email protected]> >>> *Subject:* Re: [esb-java-user] dbreport question >>> >>> Hi Remsy >>> >>> All the samples in [1] show a scenario somewhat similar >>> to your scenario (I believe). In those samples, get an ID >>> from DB and set it as message context property >>> and then perform conditional switching based on the value >>> of that property. On the out path, some result form >>> response is stored in the DB too. >>> By going through [2], it will be easy to understand the >>> current behavior of the DB -mediators >>> >>> >>> [1] >>> >>> http://wso2.org/project/esb/java/1.7.1/docs/ESB_Samples.html#DBMediators >>> >>> [2] >>> >>> http://wso2.org/project/esb/java/1.7.1/docs/ESB_Configuration_Language.html#dblookup >>> >>> >>> Thanks >>> Indika >>> >>> Schmilinsky, Remsy wrote: >>>> I need ro propagate the result of a query (id number) from >>>> dbreport to the mediators along with the message. >>>> >>>> The idea is that the mediators will perform some actions on >>>> the message and then log results in the db, so we need the id to reference >>>> the original data. >>>> >>>> is this possible ? how ? >>>> >>>> thanks >>>> >>>> Remsy >>>> >>>> _______________________________________________ >>>> Esb-java-user mailing list >>>> [email protected] <mailto:[email protected]> >>>> http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user >>>> >>>> ------------------------------------------------------------------------ >>>> >>>> >>>> No virus found in this incoming message. >>>> Checked by AVG - http://www.avg.com >>>> Version: 8.0.173 / Virus Database: 270.7.5/1698 - Release >>>> Date: 9/29/2008 7:25 PM >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------ >>> _______________________________________________ Esb-java-user >>> mailing list [email protected] >>> <mailto:[email protected]> >>> http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user >>> >>> ------------------------------------------------------------------------ >>> >>> >>> No virus found in this incoming message. >>> Checked by AVG - http://www.avg.com >>> Version: 8.0.173 / Virus Database: 270.7.5/1698 - Release Date: >>> 9/29/2008 7:25 PM >>> >>> >> >> >> _______________________________________________ >> Esb-java-user mailing list >> [email protected] <mailto:[email protected]> >> http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user >> >> >> ------------------------------------------------------------------------ >> _______________________________________________ Esb-java-user >> mailing list [email protected] >> <mailto:[email protected]> >> http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user >> ------------------------------------------------------------------------ >> >> >> No virus found in this incoming message. >> Checked by AVG - http://www.avg.com >> Version: 8.0.173 / Virus Database: 270.7.5/1698 - Release Date: >> 9/29/2008 7:25 PM >> >> > > > _______________________________________________ > Esb-java-user mailing list > [email protected] <mailto:[email protected]> > http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Esb-java-user mailing list > [email protected] > http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user -- Paul Fremantle CTO and Co-Founder, WSO2 OASIS WS-RX TC Co-chair VP, Apache Synapse Office: +44 844 484 8143 Cell: +44 798 447 4618 blog: http://pzf.fremantle.org [EMAIL PROTECTED] "Oxygenating the Web Service Platform", www.wso2.com _______________________________________________ Esb-java-user mailing list [email protected] http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user
