well there isn't always 'just a return' in a report, right ?
You have to explicit issue a select and then choose what to use as return.

maybe always grab the LAST_INSERT_ID() in case of an insertion ?
(LAST_INSERT_ID() is mysql specific)

On Thu, Oct 2, 2008 at 2:22 PM, Paul Fremantle <[EMAIL PROTECTED]> wrote:

> 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
>
_______________________________________________
Esb-java-user mailing list
[email protected]
http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user

Reply via email to