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

Reply via email to