Seite 1 von 1

JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Donnerstag 27. April 2017, 18:37
von wpein2m
Hallo,
ich habe jetzt zum ersten mal auf einem Endgerät (Mac OS) eine neuere Version (2.8.15) installiert als bisher auf allen anderen Endgeräten (2.8.13). Die Datenbank ist (remote) MySQL auf einem Raspberry. Diese wurde seinerzeit zusammen mit einem PC unter V2.8.13 erzeugt.

Auf dem Mac OS bin ich nun auf das Problem gestoßen, dass JVerein 2.8.15 neue Spalten in der Tabelle "projekt" erzeugen wollte (per Alter table-Kommando, Startdatum, Endedatum) - das konnte m.E. nicht gehen, da der verwendete user nur Leserechte hat.

Dann habe ich auf einem Windows-Laptop mit dem gleichen user ein Upgrade von 2.8.13 nach 2.8.15 gemacht und siehe da - es funktioniert. Und oh Wunder - die Tabelle "projekt" hat nun 2 neue Spalten.

Wie in Gottes Namen ist das möglich? Mit welchem SQL-user wurde die Tabelle geändert?Und woher hat JVerein den?

Ich verstehe den Datenbank-Upgrade-Mechanismus nicht - gibt es dazu vielleicht eine Beschreibung oder ein Dokument wie das funktioniert?

Irgendwie muss ja JVerein per SQL-Kommandos die Datenbank strukturell ändern können, falls das bei einer neuen Version nötig ist - wie wird das getriggert? Ich habe in einem Beitrag gelesen, dass es eine Tabelle namens Version gibt (dort steht bei mir jetzt der Wert 416 drin - was immer das bedeuten mag) - ist das der trigger?

Jede Hilfe zum Verständnis ist willkommen!

Wolfgang

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Donnerstag 27. April 2017, 23:22
von heiner
Hallo Wolfgang,

JVerein prüft bei jedem Start, ob die in der Datenbank gespeicherte Datenbankversionsnummer kleiner ist als die vom Programm erwartete Versionsnummer. Wenn das der Fall ist, werden die benötigten SQL-Statements ausgeführt und die Datenbankversionsnummer entsprechend angepasst.

Dazu ein Hinweis: JVerein wurde als Standalone-Lösung mit H2 entwickelt. Die MySQL-Anbindung ist später eingebaut worden. Es gibt einige Dokument im Forum und in der JVerein-Dokumentation zum Thema Multiuser-Betrieb. JVerein unterstützt keinen echten Multiuserbetrieb. Das, was von verschiedenen Benutzern entwickelt/beschrieben wurde, sind im Endeffekt nur Krücken, die u. a. zu den von dir beschriebenen Fehlersituationen führen.

Heiner

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Freitag 28. April 2017, 15:31
von wpein2m
Hallo Heiner,
vielen Dank, das sind sehr hilfreiche Erläuterungen.

Eines verstehe ich trotz allem nicht im MySQL-Umfeld: ich habe auf dem (entfernten) My-SQL-Server mehrere User angelegt, einer davon (user "remote") nur mit Leserechten. Nun habe ich auf einem PC mit diesem user=remote den JVerein-Upgrade von 2.8.13 nach 2.8.15 gemacht. In der Tabelle "projekt" wurden Spalten per SQL-Kommandos hinzugefügt - aber unmöglich mit dem user remote (der hat dazu keine Rechte!!). Woher also hat JVerein den user mit Schreibrechten?

Ich kann mir das nur so erklären, dass irgendwo in den Tiefen der SQL-Datenbank verborgen der user mit Schreibrechten und dazugehörigem Passwort "hinterlegt" ist (z.B. bei der erstmaligen Inbetriebnahme von JVerein?), dieser user wird ausgelesen und mit diesem (anderen) user werden dann die SQL-Tabellen-Änderungen durchgeführt.

Oder geht das völlig anders? Vielleicht verstehe ich auch das MySQL-Rechte-Prinzip nicht richtig. Wenn ich aber JVerein mit dem user=remote aufrufe, dann können, wie gewollt, keine Änderungen in JVerein durchgeführt werden.

:-) Wolfgang

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Samstag 29. April 2017, 19:11
von heiner
Der User wird aus der Datei de.jost_net.JVerein.rmi.JVereinDBService gezogen.

Heiner

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Samstag 29. April 2017, 23:54
von wpein2m
Hallo Heiner,
das war mir schon klar, dass in der Datei "de.jost_net.JVerein.rmi.JVereinDBService" die Angaben zur MySQL-Server Verbindung stehen, insbesondere also DNS-Servername und vor allem MySQL username + Password. Mein Dilemma ist, dass in dieser Datei nur ein User mit Leserechten steht, der kann und darf keine MySQL-Datenbankänderungen durchführen. Wenn nirgendwo sonst in JVerein ein anderer MySQL user (mit Schreibrechten) gespeichert ist bzw. bei DB-upgrades benutzt wird, dann ist mir unerklärlich, mit welchem user dieser Upgrade von 2.8.13 nach 2.8.15 durchgeführt wurde. Leider habe ich MySQL bei diesem DB-update nicht mitgetraced.

Aber egal - der Upgrade hat ja funktioniert, ist mehr Neugierde/Wissbegierde meinerseits!

Wolfgang

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Mittwoch 3. Mai 2017, 20:38
von heiner
Hallo Wolfgang,

woher soll JVerein eine Kennung mit dem dazugehörigen Kennwort von deinem MySQL-Server kennen? Die Kennung musst du schon dort angegeben haben.

Heiner

Re: JVerein - wie funktioniert ein Datenbank Upgrade?

Verfasst: Mittwoch 3. Mai 2017, 21:43
von wpein2m
Hallo Heiner,
vielleicht drücke ich mich falsch aus: auf dem SQL-Server habe ich 2 user definiert: A und B. A hat Leserechte, B hat Schreibrechte. In JVerein ist in der Datei de.jost_net.JVerein.rmi.JVereinDBService.properties der user A mit zugehörigem Passwort definiert, deshalb klappt auch ein lesender Zugriff auf den SQL-Server. Als ich mit diesem User auf dem MacBook (JVerein 2.8.15) einen Zugriff auf den SQL-Server gemacht hat, der noch die Version 2.8.13 hatte, wurde der Zugriff abgelehnt wegen eines Alter table-Kommandos, für den naturgemäß der lesende Zugriff nicht ausreicht - völlig in Ordnung.

Nur als ich auf meinem Laptop unter Windows , bei welchem in der Datei de.jost_net.JVerein.rmi.JVereinDBService.properties ebenfalls user A eingetragen war, auf JVerein 2.8.15 aktualisiert habe, klappte der Zugriff und der SQL-Server war auf einmal auf V2.8.15 d.h. das Alter table Kommando ist durchgeführt worden. Zuerst dachte ich: klar, auf dem Laptop habe ich user = B eingetragen, dem war aber nicht so, in der Datei de.jost_net.JVerein.rmi.JVereinDBService.properties steht ebenfalls user = A.

Einzige Erklärung für mich: irgendwie muss JVerein (auf dem Laptop) eine andere Version der datei de.jost_net.JVerein.rmi.JVereinDBService.properties benutzt haben, in welcher noch User = B steht. Tatsächlich gib es solche Dateien auf meinem PC, allerdings ohne extension properties (z.B. in meiner Dropbox) - und warum sollte JVerein die nutzen?

Nun denn, das ist inzwischen kein richtiges Problem (mehr), alle User (PC und MacBook) können auf den SQL-Server unter V2.8.15 zugreifen!

Wolfgang