Ein "Database Connection Leak" in JBoss 8 (WildFly 8) bedeutet, dass Datenbankverbindungen aus dem Connection Pool nicht ordnungsgemäß zurückgegeben werden und dadurch mit der Zeit erschöpft werden. Das kann zu Performance-Problemen oder sogar zum Ausfall der Anwendung führen. **Typische Ursachen:** - Verbindungen werden im Code geöffnet, aber nicht geschlossen (z.B. `connection.close()` fehlt). - Fehlerhafte Exception-Handling-Logik, die das Schließen der Verbindung überspringt. - Langes Halten von Verbindungen (z.B. durch lange Transaktionen). **Wie kannst du Connection Leaks erkennen und beheben?** 1. **Logging aktivieren:** In der `standalone.xml` oder `domain.xml` kannst du im Datasource-Abschnitt das Leak-Detection-Feature aktivieren: ```xml <datasource ...> ... <validation> <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> <background-validation>true</background-validation> <background-validation-millis>60000</background-validation-millis> </validation> <timeout> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> <set-tx-query-timeout>true</set-tx-query-timeout> <query-timeout>60</query-timeout> <allocation-retry>2</allocation-retry> <allocation-retry-wait-millis>5000</allocation-retry-wait-millis> </timeout> <pool> <flush-strategy>IdleConnections</flush-strategy> </pool> </datasource> ``` Für explizite Leak-Detection gibt es in WildFly/JBoss 8 keine eigene Einstellung wie z.B. `leakDetectionThreshold` in HikariCP, aber du kannst das Logging für das Connection-Pooling-Subsystem (IronJacamar) erhöhen: ```bash ./bin/jboss-cli.sh --connect /subsystem=logging/logger=org.jboss.jca:write-attribute(name=level,value=DEBUG) ``` 2. **Monitoring:** Über die JBoss Management Console (http://localhost:9990/), Menüpunkt "Runtime" → "Subsystems" → "Datasources", kannst du die aktiven/verwendeten Verbindungen überwachen. 3. **Code-Review:** Stelle sicher, dass alle Datenbankverbindungen, Statements und ResultSets in einem finally-Block oder mit try-with-resources geschlossen werden: ```java try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement("SELECT ...")) { // ... } catch (SQLException e) { // Fehlerbehandlung } ``` 4. **Fehlerbehebung:** - Überprüfe Logfiles auf Warnungen wie "Connection not closed" oder "Connection leak detected". - Optimiere den Code, um sicherzustellen, dass Verbindungen immer geschlossen werden. **Weitere Infos:** - [WildFly Dokumentation: Datasource Configuration](https://docs.wildfly.org/8/Admin_Guide.html#Datasource_Configuration) - [IronJacamar Dokumentation](http://www.ironjacamar.org/doc.html) **Fazit:** Ein Connection Leak ist meist ein Fehler im Anwendungscode. Nutze Logging, Monitoring und Code-Reviews, um die Ursache zu finden und zu beheben.