jdbc connection als singleton

ruutaiokwu

Top Contributor
hallo zusammen,

was haltet ihr von dieser idee:

einen wrapper für das jdbc Connection-interface erstellen (natürlich mit konkreter implementierung, welches dbms-system auch immer...), diesen als singleton einsetzen sowie die .close-methode des wrappers leer lassen...

was denkt ihr darüber? wäre ziemlich genau das gegenteil von "connection pooling"...

dann kann man das ganze auch "schön" in der destroy()-funktion des servlets verwenden:

Java:
MyConnection.getInstanceWithoutParameters().releaseConnection();

1. releaseConnection gehört nicht zum interface "Connection" ! diese methode ist von mir selbst...

2. getInstanceWithoutParameters() ist ein wenig doof als name*, der sinn davon ist, dass man die singleton-instanz OHNE PARAMETER holen kann, denn diese parameter habe ich in der destroy()-funktion des servlets nicht... -> ALS ERSTES MUSS DAS SINGLETON ABER MIT PARAMETERN INSTANZIERT WERDEN...

(* nicht dass wir wieder eine diskussion führen über gut und schlecht, was eher kontraproduktiv wäre...)


grüsse, jan
 
M

maki

Gast
Das würde imho schnell zum Falschenhals mutieren, eine Connection für mehrere User/Threads, Transaktionen sind dann wohl eher off-limit.

Was ist denn das Problem mit einem ConnectionPool?
Kenne selber nur Vorteile.
 

ruutaiokwu

Top Contributor
das problem ist, dass bei unseren webanwendungen memory leaks und komische fehlermeldungen auftauchen (was mit "TimerThread0" etc...) wenn man mehrmal hintereinander ein redeployment macht, falls wir tomcat > version 6.0.20 verwenden. (das problem ist bekannt, wenn man danach googelt)

die lösungen im netz haben haben mir bisher nicht geholfen, und ich vermute dass der jdbc-treiber daran "schuld" ist...

ggf. würde sich das mit meinem hack lösen?

auf jedenfall hatte ich auch schon probleme mit dem monitoring-tool "JavaMelody", dort gab's probleme mit log4j (NoClassDefFound für NOPLoggerRepository - obwohl NOPLoggerRepository GANZ KLAR im classpath war)

und das konnte ich auch in der detroy()-funktion der servlets lösen, mit:

Java:
        LogFactory.release(Thread.currentThread().getContextClassLoader());

(+zusätzlich ENABLE_CLEAR_REFERENCES für den tomcat auf "false"...)


vielleicht ist das beim oben geschilderten problem ähnlich...? das problem ist das ich nicht wirklich beurteilen kann, was der grund dafür ist...
 
M

maki

Gast
Ja, Tomcat hat ein paar Probleme, die sich aber IHMO auch anders lösen lassen als keinen CP mehr zu verwenden.
Speziell die "falsche" Nutzung von static ist ein Problem beim Redeploy von WebApps.
Wie sieht das eigentlich beim aktuellen Tomcat 7 aus?
 

ruutaiokwu

Top Contributor
"Wie sieht das eigentlich beim aktuellen Tomcat 7 aus?"

exakt das gleiche problem! und diese tatsache stress mich vor allem! glaube nicht, dass bei uns geplant ist, tomcat 6, (höchstens 6.0.20) für die nächsten 2-3 jahre zu verwenden...

jedoch ist bei uns die idee aufgekommen, den "fetten" glassfish 3 zu verwenden, worüber ich GAR NICHT begeistert bin! (fettes, klobiges teil, wer braucht schon corba und solche sachen, und wir brauchen nicht mal ejb's und auch keine jms, sondern nur die servlet api, also wider mal "mit kanonen auf spatzen schiessen"! wenn wir eines tages ejb's verwenden würden, wäre ich eher für jboss, der würde die anforderungen VÖLLIG abdecken!)

keine ahnung, wie es sich mit glassfish verhalten würde, dessen servlet engine basiert ja nicht auf tomcat? richtig?
 

ruutaiokwu

Top Contributor
scheint leider nicht wirklich was zu bringen. wenn aber zwischen den redeployments keine requests gemacht werden, dann scheint es mir so, dass das problem nicht auftaucht.

habe ca. 10 mal ein redeployment provoziert, durch einfügen von leerzeilen in die web.xml. immer alles gut gegangen.

wenn ich aber gleichzeitig den stresstest laufen lasse (ca. 20 threads mit http-request in endlosschleife), erhalte ich beim 1. redeployment diese meldung:

SCHWERWIEGEND: The web application [/SLS] registered the JDBC driver [com.micros
oft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web app
lication was stopped. To prevent a memory leak, the JDBC Driver has been forcibl
y unregistered.


...macht ja auch einen gewissen sinn, wenn kein request, dann auch keine db-connection!
 
M

maki

Gast
Da steht doch dass er den Treiber abgeschossen hat, damit dürfte es kein Leak geben imho.
 

ruutaiokwu

Top Contributor
...ja, war mir selber nicht mehr ganz sicher, habe diese meldung schon seiten monaten nicht mehr gesehen, da ich tomcat 6.0.20 eingesetzt habe.

genau in diesem moment wo diese meldung auftaucht, steht die webapp ca. für 2 minuten still, dann ist sie wieder ansprechbar...

aber eben: passiert wie gesagt nur beim redeployment, und der prod. server wird beim (re)deployment-prozess eh heruntergefahren und wieder neu gestartet...

trotzdem versuche ich herauszufinden, an was es liegt....
 

ruutaiokwu

Top Contributor
gleiches problem mit andern jdbc-treibern:

SCHWERWIEGEND: The web application [/SLS] registered the JDBC driver [com.mysql.
jdbc.Driver] but failed to unregister it when the web application was stopped. T
o prevent a memory leak, the JDBC Driver has been forcibly unregistered.
17.06.2011 15:17:43 org.apache.catalina.loader.WebappClassLoader clearReferences
Jdbc

SCHWERWIEGEND: The web application [/SLS] registered the JDBC driver [net.source
forge.jtds.jdbc.Driver] but failed to unregister it when the web application was
stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregister
ed.
 
M

maki

Gast
Lässt du die eine JNDI DataSource vom Tomcat geben oder machst du die JDBC Connection selber?
Vielleicht läuft es besser wenn der TC die Kontrolle über den Treiber bekommt.
Ansonsten hilft wohl nur ein richtiger JEE AppServer.
 

ruutaiokwu

Top Contributor
die libraries befinden sich unter /WEB-INF/lib, und die connection(s) mache ich selbst...

ja, habe auch schon gelesen dass sich das in der anderen variante lösen könnte. na ja, wenn bis zuletzt nichts anderes mehr übrig bleibt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
B JDBC Connection Fehler Datenbankprogrammierung 8
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
D Wie bekommt man die JDBC connection zum laufen?(Eclipse) Datenbankprogrammierung 16
B db2 jdbc connection Datenbankprogrammierung 4
S JDBC connection open Datenbankprogrammierung 3
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
S JPA Hibernate: "The user must supply a jdbc connection" Datenbankprogrammierung 4
F MySQL - Connection JDBC-Driver Problem Datenbankprogrammierung 4
W JDBC Connection isValid()? Datenbankprogrammierung 4
G allgemeine JDBC-Connection Frage Datenbankprogrammierung 2
J jdbc Oracle Connection refused Datenbankprogrammierung 6
T JDBC Connection refused Problem Datenbankprogrammierung 6
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben