Hi Paul

No... current DB report is only do add/update operation. It seems it is helpful to provide lasted inserted record identity. So we need new abstraction as an extension to the existing one- DB report with return value. Return value will be another statement so that it can be configured for database specific ways.
Thanks
Indika

Paul Fremantle 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

------------------------------------------------------------------------


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]
http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-user

Reply via email to