This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Datensatz Sperrung

Allgemeine Fragen zur Entwicklung von und mit JVx.

Datensatz Sperrung

Postby naev » Tue Feb 04, 2020 11:13 am

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!
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby johnit » Tue Feb 04, 2020 11:08 pm

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.
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby Support@SIB » Wed Feb 05, 2020 12:24 am

Mit VisionX kann auf Transaction Modus (commit/rollback) gewechselt werden, wenn die Forms Lizenz enthalten ist.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Datensatz Sperrung

Postby naev » Wed Feb 05, 2020 12:24 pm

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"?
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby Support@SIB » Wed Feb 05, 2020 1:26 pm

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.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Datensatz Sperrung

Postby naev » Thu Feb 06, 2020 9:11 am

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?
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby Support@SIB » Thu Feb 06, 2020 12:28 pm

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.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Datensatz Sperrung

Postby naev » Thu Feb 06, 2020 2:10 pm

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?
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby johnit » Thu Feb 06, 2020 5:06 pm

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....
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby naev » Fri Feb 07, 2020 8:46 am

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?
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby johnit » Fri Feb 07, 2020 2:53 pm

Also ich hol mir immer den nightly build:
https://dev.sibvisions.com/jvx.nightly/?download
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby johnit » Fri Feb 07, 2020 2:54 pm

? Nein, die Methode setTransactionTimeout gibt es!
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby naev » Fri Feb 07, 2020 3:18 pm

Hi Johnit,
danke noch mal, ich werde ausprobieren. Wie kann ich das Logging für DBAccess einschalten?
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby johnit » Fri Feb 07, 2020 3:20 pm

Nicht böse sein, aber eine Suche in der Doku schadet nicht: http://doc.sibvisions.com/applications/ ... re_logging
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby naev » Fri Feb 07, 2020 3:44 pm

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.
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm

Re: Datensatz Sperrung

Postby johnit » Fri Feb 07, 2020 4:21 pm

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.
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby Support@SIB » Fri Feb 07, 2020 4:29 pm

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.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Datensatz Sperrung

Postby johnit » Fri Feb 07, 2020 4:45 pm

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 ;-)
johnit
 
Posts: 45
Joined: Fri Nov 16, 2012 5:58 pm

Re: Datensatz Sperrung

Postby naev » Mon Feb 10, 2020 12:30 pm

Vielen lieben Dank an euch allen. Ich werde so weiter machen wie ihr mir vorgeschlagen habt. Hier gefällt mir sehr gut, danke.
naev
 
Posts: 14
Joined: Fri Jan 31, 2020 12:51 pm


Return to Development (DE)