geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <david_jen...@yahoo.com>
Subject Re: daytrader with Tranql Oracle XA resource adapter
Date Fri, 07 Jul 2006 16:38:32 GMT
Can you (or have you already) try using the generic tranql wrapper  
with the oracle Driver class and set the commitBeforeAutocommit  
property to true?  This definitely _ought_ to make the commit happen  
immediately: if it does, the oracle driver has a bug and we need to  
modify the oracle wrapper to work around it.

thanks
david jencks

On Jul 7, 2006, at 8:25 AM, Lin Sun wrote:

> Hi there,
>
> Thanks for the pointer!  IIUC, if the application uses  
> connection.commit,
> tranql will translate that as setautocommit(true) when the
> commitBeforeAutoCommit is set to false.   I believe this is what I  
> have in
> my environment.
>
> However, I still don't understand why it makes such a big  
> difference for
> Oracle.  I have loaded daytrader on another J2EE application server
> (WebSphere Application Server) and found out the same order  
> committed to the
> oracle database right away.  With that, I would not categorize it  
> as one of
> the problematic drivers you mentioned before.
>
> Since derby and db2 XA adapter don't have this "delayed committing"  
> problem
> at all, I compared the two Tranql vendors' code with the Oracle  
> vendor code.
> Basically the vendor code contains the vendor specific MCF class  
> that is
> created based on the datasource from the vendor (for example,
> OracleXADataSource).  The MCF also sets/gets the datasource's  
> different
> properties (like databasename, username, password, servername,  
> etc.).  I
> still don't get much clue as to why Oracle is special with Tranql.
>
> I think what I'll do is to come up with a simple application that  
> can be
> loaded into Eclipse and step into the connection.commit() code from  
> Eclipse.
> Too bad that I haven't figured out how to get daytrader running from
> Eclipse.:-(
>
> Time to study the new plugin Sachin puts out.:-)
>
> Lin
>
>
>
>
>
> -----Original Message-----
> From: Mario Rübsam [mailto:mr@coderesearch.com]
> Sent: Thursday, July 06, 2006 2:37 PM
> To: user@geronimo.apache.org
> Subject: Re: daytrader with Tranql Oracle XA resource adapter
>
> Lin Sun wrote:
>> Hi there,
>>
>> Do you know how to log the commits on the oracle side?  I 'll be  
>> happy to
>> check that out if I know how to do it.
>
> I don't have a clue about the Oracle tools. But there must be some  
> admin
> tool to show the stats of the server, the connections, threads, ...
> There is normally a transaction counter in these tools. Another way  
> to find
> it out is to look into the driver itself and figure out what is  
> going on
> in the setAutoCommit() method. But this is not legal in every  
> country for
> closed source interfaces.
>
>>
>> I posted another note yesterday.   The application was not using
> AutoCommit.
>> Instead connection.commit() is being used.
>
> That is correct, but to commit the local transaction TranQL use the
> setAutoCommit(true); method, so if the JDBC driver is spec  
> compliant the
> transaction must be commited ... so far the theory, in the real world
> some of the drivers don't do it for performance or whatever reasons.
>
> There was already a discussion about this problem here:
> http://www.mail-archive.com/user@geronimo.apache.org/msg03450.html
>
> Thanks,
> Mario
>
>
>
>>
>> Lin
>>
>> -----Original Message-----
>> From: Mario Rübsam [mailto:mr@coderesearch.com]
>> Sent: Wednesday, July 05, 2006 4:59 PM
>> To: user@geronimo.apache.org
>> Subject: Re: daytrader with Tranql Oracle XA resource adapter
>>
>> I don't have experience with the Oracle Adapter. Can you log the  
>> commits
> on
>> the Oracle side to see if any commits come through? I had a similar
> problem
>> with MaxDB and it seems that the transactions are not closed  
>> because the
>> JDBC driver for MaxDB did no commit on the connection if the  
>> AutoCommit
> was
>> switched from false to true. The JDBC spec says if the value  
>> changed the
>> connection must be commited but the driver does not. Thats why I use
>> CommitBeforeAutCommit now.
>> Can you try to use the generic adapter to connect to Oracle and  
>> see if it
>> happens also?
>>
>> Thanks,
>> Mario
>>
>>
>> Lin Sun wrote:
>>> Hi there,
>>>
>>> Thanks - I remember seeing your posting on CommitBeforeAutCommit  
>>> setting
>> in
>>> the generic adapter.    The CommitBeforeAutCommit setting is not  
>>> avail in
>>> the Oracle XA resource adapter.
>>>
>>> Lin
>>>
>>> -----Original Message-----
>>> From: Mario Rübsam [mailto:mr@coderesearch.com]
>>> Sent: Thursday, June 29, 2006 4:56 PM
>>> To: user@geronimo.apache.org
>>> Subject: Re: daytrader with Tranql Oracle XA resource adapter
>>>
>>> Hi,
>>>
>>> the CommitBeforeAutCommit setting in the generic adapter call
>>> a commit on the local connection before it calls setAutoCommit 
>>> (true).
>>> Some JDBC drivers act not like specified in JDBC and don't call
>>> a commit when the AutoCommit value changes with setAutoCommit(true)
>>> so CommitBeforeAutCommit is a workaround to get the transaction
>>> commited on these drivers (MySQL, MaxDB, PostgreSQL in some cases).
>>> I don't know about the XA driver and Oracle but it could be a  
>>> similar
>>> problem.
>>>
>>>
>>> -Mario
>>>
>>>
>>>
>>> Lin Sun wrote:
>>>> Hi there,
>>>>
>>>> I have been playing with the daytrader with Tranql Oracle XA  
>>>> resource
>>>> adapter (tranql-connector-oracle-xa-1.1.rar).  After I tweaked the
>>>> plan a bit and I am able to get daytrader running well with oracle!
>>>>
>>>> One thing I noticed is that if I perform any trading activities  
>>>> as a
>>>> user (say uid:1, account_id 50), I get the message that my order  
>>>> has
>>>> been completed almost immediately.  However, the order isn't  
>>>> committed
>>>> into the oracle database until quite a while.  I don't know the  
>>>> exact
>>>> timing but seems to be over 20-30 minutes.
>>>>
>>>> Here is what I did to check if the order is recorded in the  
>>>> database:
>>>>
>>>> Select * from orderejb where account_id=50;
>>>>
>>>> If the order is committed into the database, I would expect a  
>>>> row that
>>>> represents my previous order to be returned as the output of the  
>>>> sql
>>>> command.
>>>>
>>>> If I run the same scenario with db2 or derby, I can see my order
>>>> recorded in the orderejb table immediately.
>>>>
>>>> I looked at the tranql oracle vendor code but I didn't see anywhere
>>>> specifying the commit timing thing.  The generic resource  
>>>> adapter does
>>>> offer an param called CommitBeforeAutCommit and by setting it to  
>>>> true
>>>> would force the commit to happen immediately.   Can someone shed  
>>>> some
>>>> light on this?
>>>>
>>>> Thanks, Lin
>>>>
>>>
>>
>>
>


Mime
View raw message