# "In"Deployment



## OnDemand (12. Jan 2016)

Hallo zusammen,

mal eine Frage zum Deployment. Meine App arbeitet auf Glassfish und macht automatisiert verschiedene Tasks in seperaten Threads. Nun hab ich angenommen eine Verbesserung programmiert und möchte diese auf dem produktiven Server deployen. 1 Thread ist aber noch fröhlich am arbeiten (Daten in DB schreiben) und braucht noch 1 h.

Gibts eine Möglichkeit, dass man während des Arbeitens deployed ohne den aktuell noch arbeitenden Thread abzubrechen und zu riskieren, dass Daten fehlen? Klar könnte ich warten, aber evtl. startet derweil schon wieder ein neuer Thread und ich muss wieder warten.
Wie macht ihr das, gibts da eine best pratice?


----------



## Joose (12. Jan 2016)

Kommt ganz darauf an was gemacht wird 

Ist es wichtig was der Thread macht? Kann man auf den Stand von vor dem Start des Threads zurücksetzen? Beeinflusst es jemand anderen?
Entsprechend kannst du den Thread abbrechen die neue Version deployen, den Stand zurücksetzen und alles wieder starten.

Handelt es sich eher um kritische Daten dann sollte es eine kleine Möglichkeit geben deine Anwendung zu steuern (per Webkonsole zum Beispiel). Damit verhindert wird das sich, während du den letzten Thread auslaufen lässt, neue starten. Oder aber das du dem Thread mitteilst bei der nächsten Möglichkeit abbrechen um danach dem Deploy und Neustart an entsprechender Stelle fortzuführen.

Wenn wir bei Kunden ein GoLive haben wird meistens schon ein paar Tage vorher geschaut und geplant, dass die automatischen Jobs nicht einfach loslaufen bzw kurz davor ein letztes mal ausgeführt werden (man weiß in etwa wie lang sie jeweils dauern). Natürlich kommt es da oft vor das man auch in der Nacht vor Ort ist, weil hier ein entsprechendes Zeitfenster vorliegt und nicht zuviel beeinflusst wird.

Best Practice wird es keine geben, da es auch immer darauf ankommt was verarbeitet wird, wie wichtig ist die Verarbeitung, ist sie wiederholbar usw.
Auch hat jeder eigene Vorstufen beim Deployment (Test hier, Test dort, oder Test dort, möglicher Probelauf, Qualitätskontrollen, ....)


----------



## OnDemand (12. Jan 2016)

HI, danke für die Info, gute Idee; ich könnte ein Flag setzen und dieses auf 1 setzten und nur die Aufgabe starten, wenn alles auf 0 ist. Das ist ne gute Idee, aber was ist ne Webconsole, klingt interessant! Gleich mal goooglen

Meinst sowas hier ? http://www.web-console.org/

Welche Vorteile hat das gegenüber Putty & co? Dann könnte ich aber auch im Adminbereich nen Button "Deploy vorbereiten" machen und damit alle Einträge auf 1 setzen


----------



## Joose (12. Jan 2016)

Die Webkonsole war nur ein Beispiel: Ich habe eigentlich nur eine mögliche (grafische) Steuerung für diese Applikation gemeint 
Ob das nun eine Webanwendung, eine normale Desktopanwendung oder doch eine Konsolenanwendung wäre ist egal. Dein Programm könnte eine Schnittstelle bereitstellen über welche eine andere Applikation mit ihr "kommunizieren" kann.


----------



## OnDemand (12. Jan 2016)

Ok, danke ich denke ich werde das mit dem Button machen, das scheint für mich die schnellste Möglichkeit zu sein.


----------

