This is certainly an interesting thread. Can we just clarify what we think the correct behaviour should be from Castor?
In my opinion, Castor should not return created objects via OQL or any other means until they are committed. That's because in Castor's world, objects do not exist until they are committed to the database. I really do believe that otherwise this could cause isolation problems - it's like withdrawing money from your bank account with an uncleared check! It might be OK to allow OQL to return the object within the transaction that created it (from within the transactional cache say), but not within other transactions. But within a single transaction, you should have access to the created object as it should be available as a variable within the scope of the method the transaction is running within - there should be no need to get it from Castor. Transactions don't span multiple threads so there are plenty of ways you can get access to the created object. Imagine this scenario: Transaction 1 -Start transaction -Create "objectX" -Rollback transaction Transaction 2 -Start transaction -Load "objectX" via any OQL query -Change "objectX" -Commit transaction What if the sequence was this (in a multithreaded scenario): T1 start T1 create "objectX" T2 start T2 load "objectX" via any OQL query T2 change "objectX" T2 commit T1 rollback This will surely leave your system in an inconsistent state. T2 is a dirty read. Am I missing something here? I welcome your views. Cheers, Patrick -----Original Message----- From: Werner Guttmann [mailto:[EMAIL PROTECTED] Sent: 10 November 2004 22:15 To: [EMAIL PROTECTED] Subject: Re: [castor-dev] [jdo] Reading, in the same transaction, a data just created (reading via oql query) Bruce et alias, after some investigation on my side, I come to believe that whether the cache is used or not does not make a difference in this case. Why ? If somebody calls Database.create() as part of as transaction, a cache entry will not be added until execution of the commit phase. In my tests, I tried to turn the performance caches on and off, and it simply didn't make a difference. As already mentioned in a separate reply, I came to believe that this might have been fixed with the 0.9.6 release candidate, but I cannot pin down the bug number right now. All tests I have been running complete successfully, irrespective of whether the id is part of the OQL query or not. Werner On Wed, 10 Nov 2004 14:19:05 -0700, Bruce Snyder wrote: > >SYLVIE PALLUEL wrote: > >> I don't know if this can help you, but I made another test with an OQL >> pass-thru, and I get the new object before the commit phase. > >It seems to me that using pass through SQL should only work if you are >using autocommit. Are you using autocommit? What database are you using? > >> Is there something special to do to enable the OQL query to see the objects >> created inside the current transaction? > >There's nothing special that needs to be done. Just as Patrick stated, >OQL queries do not look at the cache before going to persistence. This >is different from the db.load() method which actually does look at the >cache first. > >Bruce >-- >perl -e 'print >unpack("u30","<0G)[EMAIL PROTECTED]&5R\"F9E<G)E=\$\!F<FEI+F-O;0\`\`");' > >The Castor Project >http://www.castor.org/ > >Apache Geronimo >http://geronimo.apache.org/ > > > >----------------------------------------------------------- >If you wish to unsubscribe from this mailing, send mail to >[EMAIL PROTECTED] with a subject of: > unsubscribe castor-dev > ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev