DB-Connenctions in Servlet

xrax

Erfahrenes Mitglied
Hallo zusammen,

in meinem Servlet erzeuge ich in der init() über JDBC eine Connection zu meiner MySQL-DB.

Soweit ich weis wird diese Connection vom Servlet permanent gehalten und jeder "Servlet"-Thread nutz die gleiche Connection.
Wird die Connection in irgend einer Form vom Servlet übeprüft ?
Im Abbruchsfall / Invalidität neu erzeugt ?

Ich bekomme häufig folgende Fehlermeldung:

Code:
Exception in thread "Thread-565" java.lang.RuntimeException: java.lang.NullPointerException
	at com.mysql.jdbc.JDBC4Connection$1$1.run(JDBC4Connection.java:106)
Caused by: java.lang.NullPointerException
	at com.mysql.jdbc.ConnectionImpl.abortInternal(ConnectionImpl.java:1240)
	at com.mysql.jdbc.JDBC4Connection$1$1.run(JDBC4Connection.java:104)

Ist da schlicht die DB überlastet oder sind meine obigen Überlegungen falsch ?

Wie kann ich mit möglichst wenigen Connections performant und stabile mit meiner DB kommunizieren. Die abgesetzten Querys sind jeweils simpel.

Besten Dank,
xrax
 
Hi xrax,

persitente Datenbankverbindungen sind oft problematisch, da es gewisse TimeOuts gibt, die bei Nichtbenutzung die Verbindung schließen. Ich weiß nicht wie hoch der Durchsatz bei Dir sein muss, aber man sollte immer nach der Benutzung einer Verbindung diese auch wieder schließen.
Hier kommt natürlich jetzt die Performance ins Spiel, wenn der Ablauf "Öffnen - Operation - Schließen" für jede User Aktivität zu langsam ist, kannst Du Connection-Pools benutzen. Hierfür gibt's API's z.B. Apache DBCP oder Tomcat JDBC. Du kannst dann in der Servlet initialisierung die Connection erzeugen und später bei Servlet Benutzung einfach eine Connection vom Pool holen.

e.g.

-> Servlet initialise
--> Setup DB Pool

-> Servlet called by user
--> get Connection from pool
--> do SQL
--> close Connection (schiebt die connection zurück in den Pool)

Gruß,
OneOf6
 
Zurück