Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: AW: [eclipselink-users] No OptimisticLocking Exceptionincombination with ReturnInsert and/or ReturnUpdate

File enhancement request in eclipse bugzilla https://bugs.eclipse.org/bugs/enter_bug.cgi?product=EclipseLink (you'll have to register first)
----- Original Message -----
Sent: Wednesday, August 12, 2009 9:45 AM
Subject: AW: AW: [eclipselink-users] No OptimisticLocking Exceptionincombination with ReturnInsert and/or ReturnUpdate

Hy,

I managed to program a Workaround. I wrote the Procedure optimisticLockingHook on the Entity in which I check the values of the Fields annotated with ReturnInsert/ReturnUpdate and annotated it with @PostUpdate. The Procedure throws an OptimisticLockingException if any of the Fields are null.

 

      @PostUpdate

      public void optimisticLockingHook() {

            if (creDate == null && creSign == null && mutDate == null && mutSign == null) {

                  throw new OptimisticLockException();

            }

      }

 

But where/how can I place this as an enhancement request?

 

Best Regards

Martin Berner

 

Von: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] Im Auftrag von martin.berner@xxxxxxxxxxxx
Gesendet: Mittwoch, 12. August 2009 07:23
An: EclipseLink User Discussions
Betreff: AW: [eclipselink-users] No OptimisticLocking Exception incombination with ReturnInsert and/or ReturnUpdate

 

Ok, thanks for the Information.

That sounds correct for me.

 

So where does I code a Hook to detect null returns of all returning Values to throw an OptimisticLockingExceptin my self’s?

And where can I place an enhancement request?

 

Von: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] Im Auftrag von Andrei Ilitchev
Gesendet: Dienstag, 11. August 2009 19:49
An: EclipseLink User Discussions
Betreff: Re: [eclipselink-users] No OptimisticLocking Exception incombination with ReturnInsert and/or ReturnUpdate

 

ReturningPolicy cannot be used with OptimisticLocking.

Eclipselink throws OptimisticLockException if UPDATE returns 0 (number of updated rows).

Unfortunately that doesn't work with Oracle anonymous blocks or stored procedures: BEGIN ... END; always returns one.

 

Please log enhancement request.

 

In returning case currently no update is performed on the db, but no PessimisticLockException is thrown, too

Note that in case no update was performed all the returned values are nulls (or default values for primitive types).

To workaround handle outputParametersDetected and raise OptimisticLockException yourself in case all returned values are null.

 

----- Original Message -----

To: "EclipseLink User Discussions" <eclipselink-users@xxxxxxxxxxx>

Sent: Tuesday, August 11, 2009 2:29 AM

Subject: AW: [eclipselink-users] No OptimisticLocking Exception incombination with ReturnInsert and/or ReturnUpdate

 

So far so good but.
If there are other changes going on at the Database between first load and Update -> trying to update data from an old state. There is no OptimisticLockingException to.

1. JavaApp loads the Date by select
2. Update occurs on the Database by an PL/SQL-Job or something else
3. JavaApp do an Update with all the old values in the where clause to detect an OprimisticLocking
4. because of the changed Data at the Database the Update doesn't affect any columns and the Returnvalues of the ReturnInsert/ReturnUpdate Fields are mapped to null --> But NO OptimisticLockingException <-- although there is one!


Log with ReturnInsert/ReturnUbdate:
-----------------------------------
FEIN: SELECT IDSYNDICAT, SYNNO, SYNNOM, UTILISATEUR, TEMPS, SYN_CODESEKTORLBE, SYN_DATEBEGINN, SYN_DATEENDE, SYN_INSCHRIFT, CRE_DAT, CRE_KURZZ, IDCANTON, IDDISTRICT, SYN_FRUEHJAHRSVERSAND_ID, SYN_VZGRECHTSFORM_ID FROM GESTHO.SYNDICAT WHERE (SYNNO = ?)
bind => [152]

<- skip logs till update ->

FEIN: BEGIN UPDATE GESTHO.SYNDICAT SET IDCANTON = ? WHERE ((IDSYNDICAT = ?) AND ((((((((((((((SYNNO = ?) AND (SYNNOM = ?)) AND (UTILISATEUR = ?)) AND (TEMPS = ?)) AND (SYN_CODESEKTORLBE = ?)) AND (SYN_DATEBEGINN = ?)) AND (SYN_DATEENDE IS NULL)) AND (SYN_INSCHRIFT = ?)) AND (CRE_DAT = ?)) AND (CRE_KURZZ = ?)) AND (IDCANTON = ?)) AND (IDDISTRICT = ?)) AND (SYN_FRUEHJAHRSVERSAND_ID = ?)) AND (SYN_VZGRECHTSFORM_ID = ?))) RETURNING CRE_KURZZ, UTILISATEUR, CRE_DAT, TEMPS INTO ?, ?, ?, ?; END;
bind => [25, 152, 152, CHAM, BM, 2009-08-11 08:02:47.0, 2, 1907-01-01 00:00:00.0, CHAM, 2001-08-19 00:00:00.0, INIT, 9, 6, 1896, 1686, => CRE_KURZZ, => UTILISATEUR, => CRE_DAT, => TEMPS]
AM FEINSTEN: Assign return row DatabaseRecord(
GESTHO.SYNDICAT.CRE_KURZZ => INIT
GESTHO.SYNDICAT.UTILISATEUR => BM
GESTHO.SYNDICAT.CRE_DAT => 2001-08-19 00:00:00.0
GESTHO.SYNDICAT.TEMPS => 2009-08-11 08:16:17.0)

<- skip logs till update doing update on the db by sqldeveloper in the meanwhile (SYNNOM='CHA') ->

FEIN: BEGIN UPDATE GESTHO.SYNDICAT SET IDCANTON = ? WHERE ((IDSYNDICAT = ?) AND ((((((((((((((SYNNO = ?) AND (SYNNOM = ?)) AND (UTILISATEUR = ?)) AND (TEMPS = ?)) AND (SYN_CODESEKTORLBE = ?)) AND (SYN_DATEBEGINN = ?)) AND (SYN_DATEENDE IS NULL)) AND (SYN_INSCHRIFT = ?)) AND (CRE_DAT = ?)) AND (CRE_KURZZ = ?)) AND (IDCANTON = ?)) AND (IDDISTRICT = ?)) AND (SYN_FRUEHJAHRSVERSAND_ID = ?)) AND (SYN_VZGRECHTSFORM_ID = ?))) RETURNING CRE_KURZZ, UTILISATEUR, CRE_DAT, TEMPS INTO ?, ?, ?, ?; END;
bind => [9, 152, 152, CHAM, BM, 2009-08-11 08:16:17.0, 2, 1907-01-01 00:00:00.0, CHAM, 2001-08-19 00:00:00.0, INIT, 25, 6, 1896, 1686, => CRE_KURZZ, => UTILISATEUR, => CRE_DAT, => TEMPS]
AM FEINSTEN: Assign return row DatabaseRecord(
GESTHO.SYNDICAT.CRE_KURZZ => null
GESTHO.SYNDICAT.UTILISATEUR => null
GESTHO.SYNDICAT.CRE_DAT => null
GESTHO.SYNDICAT.TEMPS => null)



Log without ReturnInsert/ReturnUpdate:
--------------------------------------
FEIN: SELECT IDSYNDICAT, SYNNO, SYNNOM, UTILISATEUR, TEMPS, SYN_CODESEKTORLBE, SYN_DATEBEGINN, SYN_DATEENDE, SYN_INSCHRIFT, CRE_DAT, CRE_KURZZ, IDCANTON, IDDISTRICT, SYN_FRUEHJAHRSVERSAND_ID, SYN_VZGRECHTSFORM_ID FROM GESTHO.SYNDICAT WHERE (SYNNO = ?)
bind => [152]

<- skip logs till update ->

FEIN: UPDATE GESTHO.SYNDICAT SET IDCANTON = ? WHERE ((IDSYNDICAT = ?) AND ((((((((((((((SYNNO = ?) AND (SYNNOM = ?)) AND (UTILISATEUR = ?)) AND (TEMPS = ?)) AND (SYN_CODESEKTORLBE = ?)) AND (SYN_DATEBEGINN = ?)) AND (SYN_DATEENDE IS NULL)) AND (SYN_INSCHRIFT = ?)) AND (CRE_DAT = ?)) AND (CRE_KURZZ = ?)) AND (IDCANTON = ?)) AND (IDDISTRICT = ?)) AND (SYN_FRUEHJAHRSVERSAND_ID = ?)) AND (SYN_VZGRECHTSFORM_ID = ?)))
bind => [25, 152, 152, CHAM, BM, 2009-08-11 07:53:18.0, 2, 1907-01-01 00:00:00.0, CHAM, 2001-08-19 00:00:00.0, INIT, 9, 6, 1896, 1686]

<- skip logs till update doing update on the db by sqldeveloper in the meanwhile (SYNNOM='CHA') ->

FEIN: UPDATE GESTHO.SYNDICAT SET IDCANTON = ? WHERE ((IDSYNDICAT = ?) AND ((((((((((((((SYNNO = ?) AND (SYNNOM = ?)) AND (UTILISATEUR = ?)) AND (TEMPS = ?)) AND (SYN_CODESEKTORLBE = ?)) AND (SYN_DATEBEGINN = ?)) AND (SYN_DATEENDE IS NULL)) AND (SYN_INSCHRIFT = ?)) AND (CRE_DAT = ?)) AND (CRE_KURZZ = ?)) AND (IDCANTON = ?)) AND (IDDISTRICT = ?)) AND (SYN_FRUEHJAHRSVERSAND_ID = ?)) AND (SYN_VZGRECHTSFORM_ID = ?)))
bind => [9, 152, 152, CHAM, BM, 2009-08-11 07:53:56.0, 2, 1907-01-01 00:00:00.0, CHAM, 2001-08-19 00:00:00.0, INIT, 25, 6, 1896, 1686]
WARNUNG: Local Exception Stack:
Exception [EclipseLink-5006] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.OptimisticLockException
Exception Description: The object [ch.braunvieh.argus_core.db.argus.entity.Syndicat[idsyndicat=152]] cannot be updated because it has changed or been deleted since it was last read.
Class> ch.braunvieh.argus.association.db.Association Primary Key> [152]


> -----Ursprüngliche Nachricht-----
> Von:
eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-
>
bounces@xxxxxxxxxxx] Im Auftrag von Andrei Ilitchev
> Gesendet: Montag, 10. August 2009 16:49
> An: EclipseLink User Discussions
> Betreff: Re: [eclipselink-users] No OptimisticLocking Exception in
> combination with ReturnInsert and/or ReturnUpdate
>
> That sounds correct:
>
> Without return after the first update the states of the object in the
> cache
> (Java app.) and in the db differ (because of the trigger);
> with return however the db value created by the trigger is returned
> back to
> the Java app., therefore the states of object in the cache and the db
> are
> the same - hence no OptimisticLockException.
>
> ----- Original Message -----
> From: <
martin.berner@xxxxxxxxxxxx>
> To: "EclipseLink User Discussions" <
eclipselink-users@xxxxxxxxxxx>
> Sent: Monday, August 10, 2009 4:23 AM
> Subject: [eclipselink-users] No OptimisticLocking Exception in
> combination
> with ReturnInsert and/or ReturnUpdate
>
>
> Hy,
> I annotated an Entity with
> @OptimisticLocking(type=OptimisticLockingType.ALL_COLUMNS) to get an
> OptimisticLickingException in case of an Update with old Data. Database
> is
> Oracle 10g. We have fields on the Table which are Updated by Oracle
> Triggers
> on Update and Insert so I annotated dies Fields by @ReturnInsert and
> @ReturnUpdate:
>
>     @Basic(optional = false)
>     @Column(name = "UTILISATEUR", nullable = false, length = 10)
>     @ReturnInsert
>     @ReturnUpdate
>     private String mutSign;
>
> If I perform a Update on that Entity without ReturnInsert and
> ReturnUpdate,
> and try to perform another update on the same Entity I get an
> OptimisticLockingException because The Fields have changed per Trigger
> on
> the Database.
>
> But with The Annotation of ReturnInsert and ReturnUpdate I didn't get
> an
> OptimisticLockingException even if there is one.
> The only Thing I see in the Log is, that it assign null to the Fields
> annotated by ReturnInsert and ReturnUpdate by Returnvalue in case of
> old
> Data, bat no Exception.
> In Fact the column wouldn't be updated, which is correct because of the
> generated WHERE - clause.
>
> Is it a Problem combining  OptimisticLocking with ReturnInsert and/or
> ReturnUpdate or have I configured something wrong? Or is it fixed in a
> newer
> Version of EL (I'm Using EL 1.0.1 distributed by GlassfishV3prelude)
>
> Thanks for any Help
>
> Berner Martin
>
> _______________________________________________
> eclipselink-users mailing list
>
eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
> _______________________________________________
> eclipselink-users mailing list
>
eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Back to the top