Not yet, (tempted to say cherie, but holding back .. ;-)). Unless you make some budget available, then I am willing to work 24 by 7.
Werner On Wed, 10 Nov 2004 16:27:36 +0100, SYLVIE PALLUEL wrote: >Ok! > >May be you have found something to look for!?! > >Sylvie. > >___________________ >CREDI RA >Sylvie Palluel > >[EMAIL PROTECTED] >___________________ > > >> -----Message d'origine----- >> De : Werner Guttmann [mailto:[EMAIL PROTECTED] >> Envoyé : mercredi 10 novembre 2004 14:32 >> À : [EMAIL PROTECTED] >> Objet : Re: [castor-dev] [jdo] Reading, in the same transaction, a data >> just created (reading via oql query) >> >> Will do ... I didn't realize that the problem is with OQL queries that do >> not query by the id. Maybe I should have read the thread more carefully, >> though .. >> ;-). >> >> Werner >> >> On Wed, 10 Nov 2004 13:42:48 +0100, Ralf Joachim wrote: >> >> > >> >I recognized this problem too some time ago but didn't analyse as deep >> >as Silvie because I had the identity available. >> > >> >Could you try the query: >> >select account from testXXX.Account account where description = "account >> 10" >> > >> >Regards >> >Ralf >> > >> >Werner Guttmann schrieb: >> >> Sylvie, >> >> >> >> I've just run a couple of tests trying to create an object and load it >> again using both Database.load() and OQLQuery.execute() .. and I don't >> have an >> >> problems. Here's a code fragment I used in one of the tests: >> >> >> >> public void testQueryAccountCreatedWithinTransaction() throws >> Exception { >> >> Account account = null; >> >> >> >> Database db = jdo.getDatabase(); >> >> >> >> db.begin(); >> >> account = new Account(); >> >> account.setId (new Integer (10)); >> >> account.setDescription("account 10"); >> >> db.create(account); >> >> >> >> OQLQuery query = db.getOQLQuery("select account from >> testXXX.Account account where id = 10"); >> >> QueryResults results = query.execute(); >> >> assertTrue (results.hasMore()); >> >> if (results.hasMore()) { >> >> account = (Account) results.next(); >> >> assertNotNull (account); >> >> assertEquals (new Integer(10), account.getId()); >> >> assertEquals ("account 10", >account.getDescription()); >> >> } >> >> db.commit(); >> >> >> >> db.begin(); >> >> account = (Account) db.load (Account.class, new Integer >(10)); >> >> db.remove (account); >> >> db.commit(); >> >> >> >> db.close(); >> >> } >> >> >> >> As you can see, I am creating a new Account instance (id 10), and use a >> OQLQuery to obtain the very same object again. >> >> >> >> If that little code fragment does not mimick what you are doing, let me >> know where the difference is. >> >> >> >> Regards >> >> Werner >> >> >> >> On Tue, 09 Nov 2004 19:01:35 +0100, SYLVIE PALLUEL wrote: >> >> >> >> >> >>>I have only one transaction to do everything. So I shouldn't have pb >> with >> >>>transaction isolation. >> >>> >> >>>After having read your answer, I've made new tests . >> >>> >> >>>While using a database which supports rollback, I can do this in the >> same >> >>>transaction: >> >>>. create an object A >> >>>. read back the object A with a pass-thru OQL query >> >>>. read back the object A with a db.load(...,objetA.getId()) >> >>>. apply the rollback >> >>> >> >>>I can't : >> >>>. read back the object A with a OQL query >> >>> >> >>>And If I have two different transactions before the rollback, I can't >> read >> >>>(anyway I use) in my transaction #2 the object being created in my >> >>>transaction #1. So the transaction isolation is ok. >> >>> >> >>>I think there's really something wrong with the way the OQL query is >> >>>executed in this case. >> >>>Is there something new on this point with the future version? >> >>> >> >>>The same tests made using direct access by jdbc are ok. >> >>> >> >>>Thanks for your interest. >> >>> >> >>>Sylvie. >> >>> >> >>>P.S.: >> >>>I can't commit the create before trying to access the object in OQL, >> because >> >>>I must rollback everything from the beginning, if there's anything >> wrong >> >>>during the whole operation. >> >>> >> >>>I tried to explain to the developers that it should be better to store >> the >> >>>id in a variable somewhere and access later when trying to load it >> (rather >> >>>than through a query, OQL or otherwise)... But they just see the fact >> that >> >>>it must work like simple jdbc way ... >> >>> >> >>> >> >>>___________________ >> >>>CREDI RA >> >>>Sylvie Palluel >> >>> >> >>>[EMAIL PROTECTED] >> >>>___________________ >> >>> >> >>>-----Message d'origine----- >> >>>De : Patrick van Kann [mailto:[EMAIL PROTECTED] >> >>>Envoyé : mardi 9 novembre 2004 18:06 >> >>>À : SYLVIE PALLUEL >> >>>Objet : RE: RE : RE : [castor-dev] [jdo] Reading, in the same >> transaction, a >> >>>data just created (reading via oql query) >> >>> >> >>>In that case, I think Castor OQL is behaving correctly with respect to >> >>>transaction isolation. >> >>>MySQL without Innodb simply doesn't support transactions, hence the >> data is >> >>>written regardless of whether you call db.commit(). >> >>>In order to guarantee that your transaction is isolated, queries should >> not >> >>>have access to the data in the database until it commits for the reason >> I >> >>>stated earlier. If your application uses JDBC or pass-through to load >> an >> >>>object that could become unavailable due a rollback, your app would be >> in an >> >>>inconsistent state. >> >>> >> >>>I think you should consider re-designing your application so that you >> either >> >>>commit the create before trying to access the object in OQL, or you >> need to >> >>>store the id in a variable somewhere that you can access later when >> trying >> >>>to load it (rather than through a query, OQL or otherwise). >> >>> >> >>>In any case, surely OQL is an unreliable way to retrieve an object? >> What if >> >>>you had to results that matched your criteria? >> >>> >> >>>I hope this helps, >> >>> >> >>>Patrick >> >>> >> >>>-----Original Message----- >> >>>From: SYLVIE PALLUEL [mailto:[EMAIL PROTECTED] >> >>>Sent: Tue 11/9/2004 4:28 PM >> >>>To: Patrick van Kann >> >>>Subject: RE : RE : [castor-dev] [jdo] Reading, in the same >> transaction, a >> >>>data just created (reading via oql query) >> >>> >> >>>Yes, I can confirm that when I rollback the transaction, the new data >> is not >> >>>created in my database (which way I use to test) . >> >>> >> >>> >> >>> >> >>>For information, I have the problem with MySql Innodb (supports >> rollback) >> >>>and Oracle. >> >>> >> >>>With MySql Isam (no rollback), the program was ok, that means that the >> Oql >> >>>query brings back the new Object .. >> >>> >> >>> >> >>> >> >>>In fact it seems that the Oql query tries to retrieve the object from >> the >> >>>database, and is not looking at his cache . >> >>> >> >>> >> >>> >> >>>Sylvie. >> >>> >> >>>___________________ >> >>> >> >>>CREDI RA >> >>> >> >>>Sylvie Palluel >> >>> >> >>> >> >>> >> >>>[EMAIL PROTECTED] >> >>> >> >>>___________________ >> >>> >> >>> >> >>> >> >>>-----Message d'origine----- >> >>>De : Patrick van Kann [mailto:[EMAIL PROTECTED] >> >>>Envoyé : mardi 9 novembre 2004 16:46 >> >>>À : SYLVIE PALLUEL >> >>>Objet : RE: RE : [castor-dev] [jdo] Reading, in the same transaction, a >> data >> >>>just created (reading via oql query) >> >>> >> >>> >> >>> >> >>>I must admit I am surprised that this is the behaviour you are seeing. >> I >> >>>would have thought that the data would not be written to the database >> until >> >>>the commit phase, otherwise you risk dirty reads (for example if the >> castor >> >>>transaction later rolls back after your JDBC call has accessed the >> data). >> >>> >> >>>Can you confirm that when you rollback the transaction (instead of >> >>>committing) that the data in the database is removed after the >> rollback(i.e. >> >>>not available to either JDBC or OQL pass through)? >> >>> >> >>>Patrick >> >>> >> >>> >> >>>-----Original Message----- >> >>>From: SYLVIE PALLUEL [mailto:[EMAIL PROTECTED] >> >>>Sent: Tue 11/9/2004 3:09 PM >> >>>To: [EMAIL PROTECTED] >> >>>Subject: RE : [castor-dev] [jdo] Reading, in the same transaction, a >> data >> >>>just created (reading via oql query) >> >>> >> >>> >> >>>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. >> >>> >> >>>Is there something special to do to enable the OQL query to see the >> objects >> >>>created inside the current transaction? >> >>> >> >>>Sylvie. >> >>> >> >>>___________________ >> >>>CREDI RA >> >>>Sylvie Palluel >> >>> >> >>>[EMAIL PROTECTED] >> >>>___________________ >> >>> >> >>> >> >>> >> >>>>-----Message d'origine----- >> >>>>De : SYLVIE PALLUEL [mailto:[EMAIL PROTECTED] >> >>>>Envoyé : mardi 9 novembre 2004 15:26 >> >>>>À : [EMAIL PROTECTED] >> >>>>Objet : Re: [castor-dev] [jdo] Reading, in the same transaction, a >> data >> >>>>just created (reading via oql query) >> >>>> >> >>>>Hello Patrick, >> >>>> >> >>>>As I answered to Marco, if my example is simple, the real code is not >> so >> >>>>simple! >> >>>> >> >>>>The program - which is running alone - tries to upgrade the content of >> a >> >>>>database which contents application parameters (a new version of the >> >>>>application will bring many new objects in different "tables", and >> >>>>modification in some existing objects). >> >>>> >> >>>>The process may be long, and in fact when we need to read the object, >> we >> >>>>have not anymore the object's reference: we have only keywords to >> retrieve >> >>>>it from database by an oql query. >> >>>> >> >>>>If, in the example, I use directly jdbc, and not jdo, the query >> retrieves >> >>>>the new object. >> >>>> >> >>>>You said OQL doesn't go through the cache: that what I thought first, >> but >> >>>>if >> >>>>I try the same thing while modifying an existing object, my oql query >> >>>>retrieves the modified object! >> >>>> >> >>>> >> >>>>db.begin(); >> >>>>log.info("Object read via oql "); >> >>>>ArrayList lesDossiers = RequetesJdoAssure.getLesDossiers("GALO", "%", >> "%", >> >>>>"%", db); >> >>>>for (Iterator iter = lesDossiers.iterator(); iter.hasNext();) { >> >>>> Dossier element = (Dossier) iter.next(); >> >>>> log.info(" Nom = " + element.getNomPatronymique() + " - Prénom = >> " + >> >>>>element.getPrenom()); >> >>>> log.info(" Modif du prénom"); >> >>>> // The object is modified >> >>>> element.setPrenom("TOTO"); >> >>>>} >> >>>> >> >>>> >> >>>>log.info(" Object is read again via oql "); >> >>>>lesDossiers = RequetesJdoAssure.getLesDossiers("GALO", "%", "%", "%", >> db); >> >>>>for (Iterator iter = lesDossiers.iterator(); iter.hasNext();) { >> >>>> Dossier elementModifie = (Dossier) iter.next(); >> >>>> log.info(" Nom Apres modif = " + >> >>>>elementModifie.getNomPatronymique() + " - Prénom après modif = " + >> >>>>elementModifie.getPrenom()); >> >>>>} >> >>>> >> >>>> >> >>>>So I'm little lost ! >> >>>> >> >>>> >> >>>>Sylvie. >> >>>> >> >>>>___________________ >> >>>>CREDI RA >> >>>>Sylvie Palluel >> >>>> >> >>>>[EMAIL PROTECTED] >> >>>>___________________ >> >>>> >> >>>> >> >>>> >> >>>>>-----Message d'origine----- >> >>>>>De : Patrick van Kann [mailto:[EMAIL PROTECTED] >> >>>>>Envoyé : mardi 9 novembre 2004 14:19 >> >>>>>À : [EMAIL PROTECTED] >> >>>>>Objet : RE: [castor-dev] [jdo] Reading, in the same transaction, a >> data >> >>>>>just created (reading via oql query) >> >>>>> >> >>>>>Sylvie, >> >>>>> >> >>>>>Your object won't be in the database until you call commit. Because >> OQL >> >>>>>doesn't go through the cache, it won't find anything unless it is in >> the >> >>>>>database. >> >>>>> >> >>>>>Why do you no longer have the ID? Surely you can get this from the >> >>>> >> >>>>object >> >>>> >> >>>>>after create()? >> >>>>> >> >>>>>Cheers, >> >>>>> >> >>>>>Patrick >> >>>>> >> >>>>> >> >>>>>-----Original Message----- >> >>>>>From: SYLVIE PALLUEL [mailto:[EMAIL PROTECTED] >> >>>>>Sent: Tue 11/9/2004 12:43 PM >> >>>>>To: [EMAIL PROTECTED] >> >>>>>Subject: [castor-dev] [jdo] Reading, in the same transaction, a data >> >>>>>just created (reading via oql query) >> >>>>> >> >>>>>Sorry! >> >>>>>Here's the complete message ... >> >>>>> >> >>>>>Hi, >> >>>>> >> >>>>>In a transaction (between the db.begin() and the db.commit()), I'm >> >>>>>creating >> >>>>>a new object A . >> >>>>>And then, far away in the code, but in the same transaction, I need >> to >> >>>>>read >> >>>>>again the object A to create another object B. >> >>>>>To do this, as I have no longer the id, I'm usinq an oql query to >> >>>> >> >>>>retrieve >> >>>> >> >>>>>A... But it is not found... >> >>>>>What can I do (castor configuration or special command) to be able to >> >>>> >> >>>>read >> >>>> >> >>>>>it by an oql query ? >> >>>>> >> >>>>> >> >>>>>db.begin(); >> >>>>> >> >>>>>log.info(" Creating object dossier via jdo "); >> >>>>>Dossier dossierAjoute = new Dossier(); >> >>>>>dossierAjoute.setNomPatronymique("LEGRAND"); >> >>>>>dossierAjoute.setPrenom("ALEXANDRE"); >> >>>>>dossierAjoute.setCivilite("M"); >> >>>>>dossierAjoute.setNumNatident("11111111111"); >> >>>>> >> >>>>>db.create(dossierAjoute); >> >>>>> >> >>>>> >> >>>>>log.info(" Reading back the object just created via jdo "); >> lesDossiers >> >>>> >> >>>>= >> >>>> >> >>>>>RequetesJdoAssure.getLesDossiers("LEGRAND", "%", "ALEXANDRE", "%", >> db); >> >>>>>log.info(" Nbre de dossiers = " + lesDossiers.size()); // The result >> >>>> >> >>>>will >> >>>> >> >>>>>be >> >>>>>0 ... for (Iterator iter = lesDossiers.iterator(); iter.hasNext();) { >> >>>>> Dossier element = (Dossier) iter.next(); >> >>>>> log.info(" Nom Apres creation = " + element.getNomPatronymique() >> + " >> >>>>>- Prénom après creation = " + element.getPrenom()); } >> >>>>> >> >>>>>// if I had the object if I could do this . >> >>>>>log.info(" Reading back the object by db.load() "); >> >>>>>Dossier dossier=(Dossier) >> >>>>>db.load(Class.forName("fr.cnam.scapin.metier.donnees.dossiers.Dossier >> "), >> >>>>>new >> >>>>>Integer(dossierAjoute.getIdDossier())); >> >>>>>// this will be ok >> >>>>>log.info("Dossier relu par db.load " + dossier.toString()); >> >>>>> >> >>>>>db.rollback(); >> >>>>> >> >>>>> >> >>>>> >> >>>>>Thanks for your help. >> >>>>> >> >>>>>Sylvie >> >>>>>___________________ >> >>>>>CREDI RA >> >>>>>Sylvie Palluel >> >>>>> >> >>>>>[EMAIL PROTECTED] >> >>>>>___________________ >> >>>>> >> >>>>> >> >>>>> >> >>>>>>-----Message d'origine----- >> >>>>>>De : SYLVIE PALLUEL [mailto:[EMAIL PROTECTED] >> >>>>>>Envoyé : mardi 9 novembre 2004 13:23 >> >>>>>>À : [EMAIL PROTECTED] >> >>>>>>Objet : [castor-dev] [castor-user][jdo] Reading, in the same >> >>>>> >> >>>>>transaction, >> >>>>> >> >>>>>>a data just created (reading via oql query) >> >>>>>> >> >>>>>>Hi, >> >>>>>> >> >>>>>>In a transaction (between the db.begin() and the db.commit()), I'm >> >>>>>>creating >> >>>>>>a new object A . >> >>>>>>And then, far away in the code, but in the same transaction, I need >> to >> >>>>>>read >> >>>>>>again the object A to create another object B . >> >>>>>>To do this, as I have no longer the id, I'm usinq an oql query to >> >>>>> >> >>>>>retrieve >> >>>>> >> >>>>>>A... But it is not found... >> >>>>>>What can I do (castor configuration or special command) to be able >> to >> >>>>> >> >>>>>read >> >>>>> >> >>>>>>it by an oql query ? >> >>>>>> >> >>>>>> . >> >>>>> >> >>> >> >>> >> >>> >> >>> >> >> >> >> >> >> ----------------------------------------------------------------------- >> - >> >> >> >> ----------------------------------------------------------- >> >> If you wish to unsubscribe from this mailing, send mail to >> >> [EMAIL PROTECTED] with a subject of: >> >> unsubscribe castor-dev >> > >> >-- >> > >> >Syscon Ingenieurbüro für >> >Meß- und Datentechnik GmbH >> >Ralf Joachim >> >Raiffeisenstraße 11 >> >D-72127 Kusterdingen >> >Germany >> > >> >Tel. +49 7071 3690 52 >> >Mobil: +49 173 9630135 >> >Fax +49 7071 3690 98 >> > >> >Email: [EMAIL PROTECTED] >> >Web: www.syscon-world.de >> > >> > >> > >> >----------------------------------------------------------- >> >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