peut OptimisticLockException se produire si le niveau d'isolement application srv est en lecture COMMIS?

StackOverflow https://stackoverflow.com/questions/3890460

Question

J'utilise le serveur d'applications Websphere 7.0.0.0.9 avec; OpenJPA 1.2.3-SNAPSHOT. J'ai la propriété Ensemble de source de données jdbc webSphereDefaultIsolationLevel = 2 (LIRE ENGAGE). J'ai cette question parce que je comprends, le OptimasticLockException se produit si la race de commettre la même ligne par fil multiple. Mais je pense que cette situation ne devrait jamais se produire si le serveur d'applications de niveau d'isolation est défini sur READ COMMITTED.

est exception que je reçois ..

<openjpa-1.2.3-SNAPSHOT-r422266:907835 fatal store error> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock violation was detected when flushing object instance 
Était-ce utile?

La solution

  

J'ai cette question parce que je crois comprendre le OptimisticLockException se produit si la race de commettre la même ligne par fil multiple.

Oui, un OptimisticLockException sera levée si l'attribut Version d'une entité est plus élevée (à savoir a été modifié par une autre transaction) à consacrer du temps que lorsqu'il a été lu. Ceci est illustré par la figure ci-dessous (emprunté à JPA 2.0 concomitance et verrouillage ):

text alt

  

Mais je pense que cette situation ne devrait jamais se produire si le serveur d'applications de niveau d'isolation est défini sur READ COMMITTED.

Pourquoi? Lorsque vous utilisez un READ COMMITTED niveau d'isolation , non répétable lit peut se produire, mais:

  1. Ceci n'affectera pas la représentation de la mémoire des données (e1 dans l'exemple ci-dessus)
  2. La plupart du temps, vous n'avez pas des données relisez
    • Et même si vous le faites (et effectuer une lecture non reproductible), une entité peut encore se modifier par un autre thread avant que vous livrez.

Pour résumer, LIRE ENGAGE n'empêchera pas OptimisticLockException.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top