Datensatz Sperrung
19 posts
• Page 1 of 1
Datensatz Sperrung
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!
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
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.
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
Mit VisionX kann auf Transaction Modus (commit/rollback) gewechselt werden, wenn die Forms Lizenz enthalten ist.
-
Support@SIB - Posts: 355
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Datensatz Sperrung
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
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.
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.
-
Support@SIB - Posts: 355
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Datensatz Sperrung
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
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.
Sie sehen die abgesetzten Statements wenn das Logging für DBAccess eingeschaltet ist.
-
Support@SIB - Posts: 355
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Datensatz Sperrung
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
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....
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
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?
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
Also ich hol mir immer den nightly build:
https://dev.sibvisions.com/jvx.nightly/?download
https://dev.sibvisions.com/jvx.nightly/?download
- johnit
- Posts: 45
- Joined: Fri Nov 16, 2012 5:58 pm
Re: Datensatz Sperrung
? Nein, die Methode setTransactionTimeout gibt es!
- johnit
- Posts: 45
- Joined: Fri Nov 16, 2012 5:58 pm
Re: Datensatz Sperrung
Hi Johnit,
danke noch mal, ich werde ausprobieren. Wie kann ich das Logging für DBAccess einschalten?
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
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
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
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.
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
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.
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.
-
Support@SIB - Posts: 355
- Joined: Mon Sep 28, 2009 1:56 pm
Re: Datensatz Sperrung
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
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
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
19 posts
• Page 1 of 1