# Wie werden aktive JEE Applications geupdatet?



## membersound (23. Nov 2012)

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


----------



## tfa (23. Nov 2012)

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.


----------



## membersound (23. Nov 2012)

Und wenn ich spalten löschen oder modifizieren will? Wie gehe ich da ran?


----------



## Sym (23. Nov 2012)

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?


----------



## membersound (23. Nov 2012)

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...


----------



## tfa (23. Nov 2012)

In der produktiven Umgebung ist der Hibernate-Automatismus natürlich ausgeschaltet. Da musst dann schon selber machen. Mit dem Schema-Generator kannst du dir das DDL ausgeben lassen.


----------



## Noctarius (23. Nov 2012)

Mit Flyway kann man sich ein wenig helfen lassen, wenn man nicht gerade einen Feature-Driven Devcycle benutzt (dann wird es schwierig).


----------



## membersound (23. Nov 2012)

Wie sieht es mit 
	
	
	
	





```
hibernate.hbm2ddl.auto=update
```
 aus? Habt ihr Erfahrung damit in Production?


----------



## tfa (23. Nov 2012)

membersound hat gesagt.:


> Wie sieht es mit
> 
> 
> 
> ...



Ne. Ist verboten.


----------



## Sym (24. Nov 2012)

membersound hat gesagt.:


> Wie sieht es mit
> 
> 
> 
> ...


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.


----------



## KSG9|sebastian (24. Nov 2012)

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


----------



## TheDarkRose (24. Nov 2012)

Unterstützt Hibernate keine Migration? 

Gesendet von meinem GT-I9000 mit Tapatalk 2


----------



## Sym (24. Nov 2012)

TheDarkRose hat gesagt.:


> Unterstützt Hibernate keine Migration?
> 
> Gesendet von meinem GT-I9000 mit Tapatalk 2


Natürlich unterstützt Hibernate bedingte Migration. Erweiterungen gehen natürlich problemlos. Richtige Datenmigrationen müssen allerdings von Hand gelöst werden.


----------



## TheDarkRose (25. Nov 2012)

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.


----------



## Sym (25. Nov 2012)

TheDarkRose hat gesagt.:


> 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.


----------

