Allgemeine Vorgehensweise Locking

prime

Mitglied
Hallo,

ich habe eine kleine Anwednung geschrieben, welche auf einem JBoss 7 läuft.
Nun kann es natürlich sein, das der Benutzer A ein Objekt läd, danach Benuzter B undn natürlich erst A und dann B speichert.
Wie geht man allgemein damit um?

Natürlich könnte ich jedes Objekt mit einem lock-flag versehen und diese manuell testen.
Gibt es eine besser Lösung? Kann ich das vll mit Hilfe von JPA definieren und JSF zeigt dem Benutzer dann die Meldung an?

Danke schon mal für eure Hilfe.
 

prime

Mitglied
Danke für die schnelle Antwort.

Ich habe versucht in meiner DAO mit
Java:
entityManager.lock(geladeneEntity, LockModeType.READ);
zu sperren.

Wenn ich aber mit einem anderen User die gleiche Entity laden will, funktioniert dies ohne Exception.
Was habe ich nicht bedacht?
 

prime

Mitglied
Ich kann irgendwie meine Beiträge nicht editieren.
Der Code sollte natürlcih folgender sein:
Java:
entityManager.lock(geladeneEntity, LockModeType.PESSIMISTIC_WRITE);
 
N

nillehammer

Gast
Wenn ich aber mit einem anderen User die gleiche Entity laden will, funktioniert dies ohne Exception.
Was habe ich nicht bedacht?
Ich habe bisher immer nur mit Optimistic Locking und Version-Feld gearbeitet. Deswegen beruht meine Antwort nicht auf Erfahrung, sondern nur auf meinem Verständnis der Dokumentation. Wenn ich diese richtig verstehe, Enden locks je nach Art schon bei Ende der zugehörigen Transaktion bzw. spätestens, wenn der EntitManager endet. Ich nehme mal an, dass eins davon bei Dir der Fall ist.

Ein Lock endet also autmomatisch und muss nicht manuell entfernt werden. Im EntityManager-Interface gibt es darum auch keine unlock-Methode.
 

prime

Mitglied
Mit Optimistic Locking wird wie erwartet eine Exception geworfen.
Ich steuerer die Conversation manuell in einem Conversation Scope.

Ich denke auch, dass der Lock wohl zu früh automatisch gelöst wird.
Ich danke dir.
 

Ähnliche Java Themen

Neue Themen


Oben