Bildaufbau durch Servlet -> Exception

suam111

Mitglied
Hallo Community,

kurz zur Thematik:

In einem Servlet erzeuge ich einen http response, der aus mitunter mehreren Bildern (jpg) besteht.
Jedes dieser sechs Bilder wird wiederum in einem zweiten Serlvet erzeugt und mittels <img src=ServletName.../> im ersten Servlet eingebunden.
Dieses zweite Servlet holt die Daten von einer mySQL Datenbank, bereitet sie auf und erzeugt eine grafische Ausgabe.

Zum Problem:

Die letzen beiden Bilder werden in den meisten Fällen nicht erzeugt, stattdessen wird folgende Exception geworfen (bei ca. jedem 5. Versuch funktioniert es aber):

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: java.net.SocketException: socket closed

Kommentiere ich zu Testzwecken die ersten Bilder aus, sodass nur die letzten beiden erzeugt werden müssen funktioniert es.
Was kann hier das Problem sein? Die Statements sind alle korrekt und auch die Bilderzeugung funktioniert in allen Fällen gleich.

Danke im Voraus!
 

suam111

Mitglied
Hallo,

das Problem hab ich behoben.
Es lag daran, dass die Bilder jeweils mit dem gleichen Servlet erzeugt werden (DB Verbindungsaufbau und -abbau), wobei alle unterschiedlich lange dauern, was dazuführen kann das, eine Erzeugung eines Bildes die Datenbankverbindung schließt, obwohl die andere Erzeugung noch auf die Datenbank zugreifen muss. -> Exception

Ich erzeuge nun die Bilder mit synchronized eins nach dem anderen.
 
M

maki

Gast
Verwendest du denn keinen ConnectionPool?
Für jede Abfrage eine Connection aufbauen um sie danach wieder zu schliessen ist langsam.
 

suam111

Mitglied
Hallo,

danke für deine Anregung.

Für jedes Statement baue ich keine Verbindung auf sondern nütze eine bereits vorhandene.
Allerdings erzeugt jedes Servlet eine eigene DB Verbindung und schließt sie auch wieder, weiß nicht wie es sonst geht.

Hier der "bildliche" Aufbau
MainServlet baut Verbindung auf, schließt Verbindung am Ende
ImageServlet baut Verbindung auf, schließt sie nach erstellen des Bildes wieder(für alle 4 Fälle neue Verbindung)

<MainServlet>
---print out other data from database
---<img src=ImageServlet?param=1/>
---<img src=ImageServlet?param=2/>
---<img src=ImageServlet?param=3/>
---<img src=ImageServlet?param=4/>
</MainServlet>


Gibt es hier eine bessere Möglichkeit? Die DB Verbindung des MainServlets kann ich ja nicht nutzen, da dieses vorher die DB VErbindung beendet, da es ja im Seitenaufbau shcneller ist als die ImageServlets.
 
M

maki

Gast
Hi,

ich weiss natürlich nicht wie genau du mit der Db arbeitest, aber ein ConnectionPool bzw. eine DataSource mit ConnectionPool (event. über JNDI) sollte es schon sein.

Connections öffnen & schliessen ist teuer, abgesehen davon solltest du deine Struktur nochmals überdenken, denn wenn konkurierende Db Zugriffe sich gegenseitig die Connection schliessen können ist Serialisierung der Zugriffe keine echte Lösung.
 

suam111

Mitglied
Hallo,

Connections öffnen & schliessen ist teuer, abgesehen davon solltest du deine Struktur nochmals überdenken, denn wenn konkurierende Db Zugriffe sich gegenseitig die Connection schliessen können ist Serialisierung der Zugriffe keine echte Lösung.

schafft hier der ConnectionPool Abhilfe oder wie genau könnte ich die Struktur besser gestalten?
 
M

maki

Gast
Struktur: Sieh dir mal das sog. DAO Pattern an
ConnectionPool: Ehrlich gesagt, macht man keine Server App mehr ohne
 

suam111

Mitglied
Hallo,

also das DAO Pattern habe ich bereits in Verwendung.

Da ich mich gerade mit dem Thema auseinander gesetzt habe, bin ich auf eine Frage gestoßen.

Gibt es eine Möglichkeit, dass man sich das freigeben der Connection nach jedem Aufruf an die Datenbank sparen kann?

Java:
conn = pool.getConnection();
//...
//fetch data from database
//..
pool.free(conn); //<--- bessere Möglichkeit?
 
S

SlaterB

Gast
das ist vielleicht was für eine Basisklasse oder einen RequestFilter,
egal wieviele tausende einzelne Servlets es gibt, an EINER zentralen Stelle werden Ressourcen zugeordnet und später aufgeräumt,
genauso ist es ja mehr oder weniger auch mit dem Request-Objekt, der Session usw.
 

suam111

Mitglied
Das mit der zentralen Stelle ist mir klar, aber mir geht es darum, dass ich jetzt nach Umstellung auf einen ConnectionPool bei jeder DB Abfrage die Verbindung freigeben muss. Sehe ich das richtig?
 
M

maki

Gast
Da ich mich gerade mit dem Thema auseinander gesetzt habe, bin ich auf eine Frage gestoßen.

Gibt es eine Möglichkeit, dass man sich das freigeben der Connection nach jedem Aufruf an die Datenbank sparen kann?
Das ist genau der Punkt bei einem ConnectionPool.
Aber du rufst den Pool nicht epxlizit auf und gibst die Connecciton dem Pool nicht explizit zurück, statt einer echten Connection bekommst du einen Proxy, der beim close aufruf das schon erledigt.
Alle modernen JDBC Treiber bieten einen ConnectionPool von Haus aus, ansosnten gibt es noch DBCP von Apache und weitere.

Welche DB bzw JDBC Treiber verwendest du denn?
 

suam111

Mitglied
Hallo,

gibt es da einen guten SampleCode?
Beim Einlesen bin ich da auf sehr viele verschiedene unterschiedliche Lösungen gestoßen, wo ich dann nicht wirklich wusste wo die großen Unterschiede lagen.
Die serverseitige Konfiguration steht nicht zur Debatte, da ich den Verbindungsaufbau (DB Name etc) zur Laufzeit aus einer config lade.

Ich verwende mysql
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
H Dienst durch ssh forwarding absichern? Allgemeine Java-Themen 15
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
W Java Telegram Bot - Eingabe durch User Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
I Buchstabe durch seinen Nachfolger ersetzen Allgemeine Java-Themen 29
M Jdeps-Error durch multi-release Allgemeine Java-Themen 6
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
C OpenCl Setup und durch JavaCode ansteuern Allgemeine Java-Themen 17
J Erste Schritte Datenspeicherung durch Java Allgemeine Java-Themen 6
M Hässliche Schrift auf Graphics durch deriveFont Allgemeine Java-Themen 0
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Aruetiise Interface Position durch JButton ermitteln Allgemeine Java-Themen 5
K Jar/DLL Abhängigkeiten durch User angeben lassen Allgemeine Java-Themen 6
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
T AWT AWT-EventQueue-0 Null_Pointer_Exception durch Variable Allgemeine Java-Themen 12
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Quadrieren einer Zahl nur durch Addition Allgemeine Java-Themen 5
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
Z Durch Bäume iterieren Allgemeine Java-Themen 3
M Unterbrechnung durch Echtzeitbefehle? Allgemeine Java-Themen 4
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
S RandomAccessFile durch bytearrayinputstream ersetzen Allgemeine Java-Themen 4
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
H Optimierung durch Threads Allgemeine Java-Themen 31
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
F Live Ticker durch Screenshots Allgemeine Java-Themen 22
C Hex Zeichen ersetzen durch leer Zeichen Allgemeine Java-Themen 5
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
N Algorithmus durch Workflow Allgemeine Java-Themen 7
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
E Oracle kann durch 0 teilen !?! Allgemeine Java-Themen 7
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
J Java Datei durch Java Datei öffnen Allgemeine Java-Themen 16
M Arraynamen durch Variable festlegen lassen Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
F Slash durch Systembezogenen Fileseparator ersetzen Allgemeine Java-Themen 18
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
A SWT Ausgabetext Shellscript durch Java Allgemeine Java-Themen 8
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
fastjack Hardwareinformationen durch Java auslesen Allgemeine Java-Themen 7
S durch Code steppen Allgemeine Java-Themen 7
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
C Markierung durch Maus lesen Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
N Scanner läuft nicht durch Allgemeine Java-Themen 2
F kamera auslösen durch Programm Allgemeine Java-Themen 17
M Maus durch JavaProgramm bewegen Allgemeine Java-Themen 2
Dissi Itext - Anordnung von Elementen durch PDF Writer Allgemeine Java-Themen 2
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
H Performancegewinn durch Mehrfachobjeknutzung Allgemeine Java-Themen 3
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
N int[] eindeutig durch eine Zahl repräsentieren Allgemeine Java-Themen 12
GilbertGrape Durch JDK debuggen Allgemeine Java-Themen 2
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Schleife durch Button beenden Allgemeine Java-Themen 6
royale Breitendurchlauf / Dijkstra durch Graph, vereinfacht Allgemeine Java-Themen 3
Hawkes Beschädigte Tarballs durch JavaTar Allgemeine Java-Themen 2
X Status Anzeige-durch Thread? Allgemeine Java-Themen 15
4 ich steige einfach nicht durch Allgemeine Java-Themen 5
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
D erstellung einer seitenlangen xml durch ireport Allgemeine Java-Themen 3
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
M Java Programm durch Datei Öffnen Allgemeine Java-Themen 6
J IOException durch BufferedWriter.flush() ? Allgemeine Java-Themen 5
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
J Zweidimensionales Array durch ZwischenArray ersetzen Allgemeine Java-Themen 3
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
J Chars in einem String durch "nichts" ersetzen Allgemeine Java-Themen 3
C Dateien auf Festplatte speichern durch "Durchsuchen-But Allgemeine Java-Themen 3
B VK_? << durch char rausbekommen Allgemeine Java-Themen 8
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4
H Programmerweiterung durch Datei die Funktionen enthält Allgemeine Java-Themen 5
J Kommerzieller Einsatz von Java - Ich blick da nich durch. Allgemeine Java-Themen 14
T Mehrere Dateien byteweise durch stream schieben Allgemeine Java-Themen 9
D Thread durch Mouse-Event beenden Allgemeine Java-Themen 5
D In einem String "\" durch das "\\" erse Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben