Page 1 of 1

Datensatz Sperrung

PostPosted: Tue Feb 04, 2020 11:13 am
by naev
Hallo Admin,
ich bin bei der Entwicklung einer Applikation, die von verschiedenen Mitarbeitern gleichzeitig benutzt wird. Wenn ein Mitabeiter an einen Datensatz arbeitet, möchte ich dass dieser Datensatz von anderen Leute gesperrt wird. D.h. sobald einer anfängt zu editieren, bekommt der andere, der auch den gleichen Datensatz editieren will, eine Warnmeldung, wo steht "Der Datensatz ist vom Mitarbeiter XY gesperrt."

Ist das überhaupt möglich in einer Vision X Anwendung? Wenn ja, darf ich einige Coding Beispiele haben? Beispiele sind sowohl auf der Java Seite als auch auf der Datenbank Seite benötigt. Danke für die Untersützung im Voraus!

Re: Datensatz Sperrung

PostPosted: Tue Feb 04, 2020 11:08 pm
by johnit
Also ob das mit VisionX geht weiß ich nicht, aber ich vermute das es sich um eine JVx Anwendung handelt?

Mit JVx kann man commit/rollback (Transaktionen) auf Datenbank Ebene verwenden und auch Datensätze direkt in der DB locken. Dadurch kann ein anderer Benutzer dann diesen Datensatz nicht editieren, aber das man dann eine Meldung bekommt von welchem Benutzer der Datensatz gelockt ist wäre mir neu.

Also du willst Pessimistic Locking umsetzen mit der genauen Info von wem gelocked wurde. Dazu wirst du dir sicher selbst etwas dazubauen müssen oder ev. die DB Storage erweitern...

Wenn du die Datenbank Locking Features nutzt, dann wird bei JVx ein SELECT ... FOR UPDATE abgesetzt um den Datensatz zu locken.... Geht relativ gut.

Re: Datensatz Sperrung

PostPosted: Wed Feb 05, 2020 12:24 am
by Support@SIB
Mit VisionX kann auf Transaction Modus (commit/rollback) gewechselt werden, wenn die Forms Lizenz enthalten ist.

Re: Datensatz Sperrung

PostPosted: Wed Feb 05, 2020 12:24 pm
by naev
Danke euch für die Rückmeldung. Wenn ich "select for update" mache, muss ich danach "commit" anschließen um das Lock freizuschalten. We kann ich eine native Query machen mit JVX? Oder gibt es schon eine Funktion für das "Commit"?

Re: Datensatz Sperrung

PostPosted: Wed Feb 05, 2020 1:26 pm
by Support@SIB
Commit, sprich Speichern, sollte vom User durchgeführt werden, mittels Button oder wie auch immer. Nur der Benutzer gibt die Transaktion frei!

Im Prinzip muss für DBAccess autoCommit deaktiviert werden (setAutoCommit(false)). Dann muss über DBAccess commit() oder rollback() aufgerufen werden.

Von VisionX wird das alles auf Knopfdruck für Sie konfiguriert, je nachdem welche Optionen lizenziert wurden! Zusätzlich werden Menü und ToolBar angepasst.


Sie haben immer und zu jeder Zeit die Möglichkeit mittels DBAccess.execute* Funktionen direkt DB Funktionalitäten aufzurufen. Diese Methoden kapseln den Zugriff auf JDBC für Sie und erleichtern die Parameterübergabe usw...
Falls Sie aber direkt die DB Connection benötigen, können Sie diese von DBAccess ebenfalls abfragen - getConnection(). Sie haben dann alle Möglichkeiten die Sie auch mit JDBC, direkt, haben.

Wenn Sie Queries selbst absetzen wollen, stellt sich natürlich die Frage was mit dem ResultSet passieren soll. Wenn es sich lediglich um eine Server-seitige Verarbeitung handelt, ist das relativ unkompliziert. Wenn die Daten aber wieder am Client angezeigt werden sollen ist die DBStorage das richtige für Sie!

Aber keine Sorge, wenn autocommit ausgeschaltet wurde, wird von DBAccess automatisch ein select... for update durchgeführt. Sie müssen sich um nichts weiter kümmern.

Um custom queries abzusetzen, bietet sich ebenfalls DBStorage an. Sie können das Statement beliebig konfigurieren. Es besteht aus unserer Sicht kein Grund den Umweg über Connection/PreparedStatement/ResultSet zu gehen.

Re: Datensatz Sperrung

PostPosted: Thu Feb 06, 2020 9:11 am
by naev
Danke Admin für die Idee. Ich habe "Auto Commit" ausgeschaltet und es läuft gut. Noch eine Frage: Wenn intern "select for update" benutzt wird, wie kann ich "nowait" dafür konfigurieren? Gibt es eine entsprechende Konfigurationsmöglichkeit oder muss man auf der Datenbank Ebene setzen?

Re: Datensatz Sperrung

PostPosted: Thu Feb 06, 2020 12:28 pm
by Support@SIB
Bei Oracle und Postgresql wird NOWAIT automatisch zum Lock Statement hinzugefügt.
Sie sehen die abgesetzten Statements wenn das Logging für DBAccess eingeschaltet ist.

Re: Datensatz Sperrung

PostPosted: Thu Feb 06, 2020 2:10 pm
by naev
Danke für die Rückmeldung. Wenn "nowait" schon gesetzt wird, soll ich eigentlich eine Fehlermeldung sofort bekommen, wenn ich einen gesperrten Datensatz bearbeite. Aber bis jetzt konnte ich nur sehen, dass der andere User immer wartet und wartet, ohne eine Fehlermeldung zu sehen. Wie kann ich hinkriegen, die Datenbank-Fehlermeldung zu zeigen?

Re: Datensatz Sperrung

PostPosted: Thu Feb 06, 2020 5:06 pm
by johnit
Welche JVx Version verwendest du denn? Ich kann mich erinnern das da mal ein Problem drinnen war.... Aber kann dir jetzt auch nicht sagen wie und wann.

Kann aber auch ein Index Lock sein. Das hatte ich bei meiner Forms Applikation auch mal als ich die portiert hatte zu JVx. Du kannst das transaction Timeout setzen auf DB Access.... Aber aufpassen, wenn die DB Operation länger dauert als das Timeout is diese natürlich auch zu Ende....

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 8:46 am
by naev
Hi Johnit, danke dir für deine Unterstützung. Folgende Info habe ich aus Manifest Datei gesehen:
Implementation-Title: JVx 2.8 (beta)
Implementation-Version: b41 17.05.2018 14:30:38
Ist das schon eine veraltete Version? Welche Version soll man benutzen?

Mit dem Timeout meinst du setMaxTime in DBAccess? Oder kann man in welcher Konfigurationsdatei einstellen?

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 2:53 pm
by johnit
Also ich hol mir immer den nightly build:
https://dev.sibvisions.com/jvx.nightly/?download

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 2:54 pm
by johnit
? Nein, die Methode setTransactionTimeout gibt es!

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 3:18 pm
by naev
Hi Johnit,
danke noch mal, ich werde ausprobieren. Wie kann ich das Logging für DBAccess einschalten?

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 3:20 pm
by johnit
Nicht böse sein, aber eine Suche in der Doku schadet nicht: http://doc.sibvisions.com/applications/ ... re_logging

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 3:44 pm
by naev
Danke dir. Ich bin so eingestiegen ohne irgendeine Schulung gehabt zu haben. Die einzige Unterlage, die ich von Kollgen bekomme, ist ganz primitiv, daher kann ich nicht wissen, wo ich was finden kann. Wenn ich Probleme habe kann nur im Forum umfragen. Zum Glück habe ich dich getroffen, sonst wird gar nichts laufen. ;) Hoffentlich wirst du mir weiter helfen. Danke.

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 4:21 pm
by johnit
Ach ja, ein Klassiker.

Du solltest mal überlegen eine Schulung zu nehmen von den Entwicklern. Ich hatte eine und hab auch immer noch Consulting für Knifflige Problemstellungen. Die Typen sind Mega und ich hab oft im Kreis gesucht bis ich dann verstanden hab wie das JVx Teil funkt. Jetzt kenn ich mich recht gut aus und arbeite mit meinen Kollegen sehr entspannt. Den Mobile Client hab ich noch nicht ganz intus, aber da wird grad rumgeschraubt hab ich gesehen.

Ansonsten ist der Support hier im Forum auch immer Tip-Top.

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 4:29 pm
by Support@SIB
Du sagtest das du VisionX verwendest? Es besteht noch ein Unterschied zwischen JVx und VisionX. VisionX wurde mit JVx entwickelt und erspart Dir als Entwickler wertvolle Zeit. Du kannst natürlich auch ohne VisionX arbeiten aber du wirst einfach länger brauchen, vor allem weil GUI Erstellung mit einem Designer praktisch und schnell ist.
Dann kommt noch Deployment, DB Design usw...

Es ist sicher nicht so einfach für Dich, mit VisionX und JVx zu starten ohne einen Überblick wie/was/wann?
Eine Schulung hilft hier natürlich allemal.

Ansonsten würde ich Dir empfehlen, mit den Getting started Unterlagen: http://doc.sibvisions.com/visionx/ zu beginnen. Du solltest zuerst ein Gefühl für Tool und Technologie bekommen bevor du sagst das alles schwer verständlich ist.

Re: Datensatz Sperrung

PostPosted: Fri Feb 07, 2020 4:45 pm
by johnit
Was mir geholfen hat war das hier: http://doc.sibvisions.com/jvx/reference
Hat mich nicht gleich ausgekannt aber nachdem ichs öfter durchgekaut hatte machte es Klick.

Hab damals auch immer den Blog gelesen und da waren Artikel bei. Schau mal dort:

https://blog.sibvisions.com/?s=artikel

Da sind ein paar PDFs zum Schmökern ;-)

Re: Datensatz Sperrung

PostPosted: Mon Feb 10, 2020 12:30 pm
by naev
Vielen lieben Dank an euch allen. Ich werde so weiter machen wie ihr mir vorgeschlagen habt. Hier gefällt mir sehr gut, danke.