Wie werden aktive JEE Applications geupdatet?

membersound

Bekanntes Mitglied
Hi,

wie updatet man laufende JEE Applications? Also angenommen die Anwendung läuft, die Datenbank enthält bereits etliche Benutzer und sonstige Objekte. Jetzt möchte man für eines dieser Objekte eine Änderung durchführen (Felder hinzufügen oder löschen).

Wie kann man nun die Application aktualisieren und dabei auch die changes in der DB ausführen, ohne dass die Daten verloren gehen? (momentan arbeite ich noch mit hibernate:mem. Da werden die Tables ja so oder so bei jedem restart neu gebaut...).

Danke
 
Bei DB-Änderungen gehen keine Daten verloren, es sei denn, du löschst irgendwelche Spalten oder Tabellen. Eine Erweiterung ist normalerweise unproblematisch. Die Anwendung wird einfach neu deployt, sobald die DB-Änderung durch ist.
 
In Regel machst Du einen Dump der DB, damit nicht schief gehen kann. 🙂

Aber allgemein schreibst Du ein oder mehrere sql-Skipte. Dann stoppst Du den Applikationserver. Spielst die Skripte ein. Installierst das Update und startest den Server neu.

Wo genau liegt denn Dein Problem?
 
Dass ich bisher nicht selbst irgendwelche SQL Befehle zur DB Änderung schreibe, sondern das alles vom Hibernate Mapping heraus automatisch geschieht (während dem Dev).

Nur wenn die App mal live geht, weiß ich eben nicht wie ich besehende tables entsprechend den Code-Changes anpassen kann...
 
Mit Flyway kann man sich ein wenig helfen lassen, wenn man nicht gerade einen Feature-Driven Devcycle benutzt (dann wird es schwierig).
 
Wie sieht es mit
Java:
hibernate.hbm2ddl.auto=update
aus? Habt ihr Erfahrung damit in Production?
Das kannst Du natürlich tun. Allerdings sollte Dir bewusst sein, das eine Migration von Daten dadurch natürlich nicht unbedingt klappt.

Wenn das Schema lediglich erweitert wird, kannst Du damit laufen. Sollte mehr notwendig sein, musst Du die entsprechenden Skripte vor dem Starten der Applikation einspielen.

Generell wird so etwas jedoch nicht produktiv eingesetzt.
 
Automatisch generierte Schemas in Produktion? Gott bewahre...bitte nicht!

Lass dir das DDL erzeugen und optimier es (Indizes u.s.w.).

Für Änderungen schreibst du halt Scripte von Hand..so wie es sich gehört 🙂
 
Ich meine Migrationsclasses. Ergo, wenn es ein Update des Datenbankschemas gibt, das eine MigrationClass erstellt wird, in dem man selbst die SQL-Befehle hineinprogrammiert, welche das DB-Schema verändern. Kenne es so z.B. von Doctrine und das funktioniert einwandfrei, wenn man eben die MigrationClass selbst erstellt/anpasst. Ein DB-Backup vor der Migration versteht sich von selbst.
 
Ich meine Migrationsclasses. Ergo, wenn es ein Update des Datenbankschemas gibt, das eine MigrationClass erstellt wird, in dem man selbst die SQL-Befehle hineinprogrammiert, welche das DB-Schema verändern. Kenne es so z.B. von Doctrine und das funktioniert einwandfrei, wenn man eben die MigrationClass selbst erstellt/anpasst. Ein DB-Backup vor der Migration versteht sich von selbst.
Mir wäre so ein Feature bei Hibernate nicht bekannt.
 

Zurück
Oben