Ziel ist, lange Startphasen während des Deployments der ece.ear in WildFly stabil abzufangen und das Verhalten des Datenbank-Schema-Updates gezielt zu steuern. Hierfür gibt es zwei Stellhebel:
-
Deployment-Timeout im Deployment-Scanner anheben, damit langlaufende Initialisierungen nicht abbrechen.
-
Hibernate DDL-Aktion über eine System-Property steuern (none/validate/update/create/create-drop).
Wann braucht man das?
Typische Symptome bei zu niedrigem Timeout oder unpassender DDL-Einstellung:
-
WildFly-Log enthält Meldung
WFLYDS0022(Deployment-Operation überschreitet Timeout). -
Die Anwendung meldet
ece.ear.failednach dem Startversuch. -
Sehr lange Datenbankmigrationen/Initialisierungen (z. B. bei Erstinstallation oder großen Updates).
Lösung A: Deployment-Timeout im Deployment-Scanner erhöhen
In der WildFly-Konfiguration (standalone.xml) kann für den Deployment-Scanner ein größeres Timeout gesetzt werden. Beispiel mit 1200 Sekunden:
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"
deployment-timeout="1200" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
</subsystem>
Parameter-Erklärung:
-
Deployment-timeout: Maximale Wartezeit in Sekunden, bis ein Deployment-Vorgang als fehlgeschlagen gilt. Erhöhen bei langen Start-/Migrationsphasen.
-
Scan-Interval: Intervall in Millisekunden, in dem der Scanner das Verzeichnis auf neue/aktualisierte Deployments prüft.
-
Runtime-Failure-Causes-Rollback: Steuert, ob bei Laufzeitfehlern ein Rollback des Deployments erfolgt.
Praxiswert: 1200 Sekunden (20 Minuten) hat sich für Umgebungen mit langsamen Datenbank-Operationen bewährt.
Lösung B: DB-Update-Verhalten beim Start steuern (updateDB / hibernate.hbm2ddl.auto)
Das Verhalten der Schemaaktualisierung wird über die Hibernate-Eigenschaft hibernate.hbm2ddl.auto gesteuert. In der persistence.xml ist sie an eine System-Property gebunden:
<!-- none, validate, update, create, create-drop -->
<property name="hibernate.hbm2ddl.auto" value="${updateDB}"/>
Die System-Property wird in standalone.xml gesetzt:
<system-properties>
<property name="resteasy.preferJacksonOverJsonB" value="true"/>
<property name="jboss.as.management.blocking.timeout" value="3600"/>
<!-- used for hibernate.hbm2ddl.auto in ece.ear\ece-services.jar\META-INF\persistence.xml -->
<property name="updateDB" value="update"/>
</system-properties>
Erlaubte Werte und Wirkung:
|
Wert |
Beschreibung |
Empfohlen für |
|---|---|---|
|
none |
Keine Schemaaktion. Existiert die DB-Struktur nicht, schlägt der Start später an anderer Stelle fehl. |
Sonderfälle/Manuell gemanagte Schemas |
|
validate |
Validiert das Schema gegen die Entitäten. Bei Abweichungen FEHLER und Deployment-Abbruch. |
Große Datenbanken, bei denen der Neustart von Wildfly mit update zu lange dauert. |
|
update |
Aktualisiert das Schema nicht-destruktiv (Tabellen/Spalten anlegen/ändern, soweit möglich). |
Default für Erstinstallation und reguläre Updates |
|
create / create-drop |
Erzeugt das Schema neu (optional mit Drop am Ende). Datenverlust möglich! |
Nur in Test-/Entwicklungsumgebungen |
Empfohlene Defaults: Update für Erstinstallation und normale Updates. Validate kann temporär für Fehlersuche genutzt werden; es lässt das Deployment bewusst fehlschlagen, wenn das Schema nicht passt.
Beispiel für einen typischen Validierungsfehler (verkürzt): fehlende Spalte optlock in Tabelle ECE_DAEMONCONFIG – das Deployment bricht ab, solange updateDB=validate gesetzt ist.
Schritt-für-Schritt-Anleitung
-
WildFly stoppen.
-
In
standalone.xmldendeployment-scanner-Abschnitt anpassen und ein ausreichendesdeployment-timeoutsetzen (z. B. 1200). -
Im Block
<system-properties>die PropertyupdateDBauf den gewünschten Modus setzen (empfohlen:update). -
WildFly starten und Logs beobachten. Bei sehr langen Starts das Timeout ggf. weiter erhöhen.
-
Bei Schemafehlern unter
validateaufupdatewechseln oder Schema manuell anpassen.
Security und Best-Practices
-
Änderungen an
standalone.xmlversionskontrolliert dokumentieren und mit Change-Request freigeben. -
Rollback-Plan bereithalten (Backup der ursprünglichen Konfiguration, DB-Backup vor größeren Änderungen).
-
Produktivwerte zunächst in Staging testen und mit realistischen Datenvolumina verifizieren.