MysqlConnect und Speicher

Status
Nicht offen für weitere Antworten.

terese0815

Mitglied
Hallo Zusammen,

ich habe hier ein Javaprojekt, dass dauerhaft auf dem Server läuft und von mehreren Clients gleichzeitig verwendet wird. In dieser Anwendung initialisiere ich eine Mysql-Verbindung.

Da ein Servermodul für mich absolutes Neuland ist und Java dazu frage ich mich, wie sich der Speicherverbrauch im Laufe der Zeit entwickelt.

Wie verhält sich die Software?

Ich öffne die Mysql-Verbindung für jeden Connect eines Clients in der folgenden Weise:

Java:
	public void MysqlConnect() {
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance(); 
		} 
		catch (Exception e) { 
			getLogger().error("Error loading: com.mysql.jdbc.Driver: "+e.toString());
		} 
		
		try {
			conn = DriverManager.getConnection(mysql_connection);
			try	{
				stmt = conn.createStatement();
				
			}			
			catch (SQLException sqlEx) {
				getLogger().error("sqlexecuteException: " + sqlEx.toString());
				//client.setShutdownClient(true);
			} 
		} 
		catch (SQLException ex) {
			// handle any errors
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
			//client.setShutdownClient(true);
		}
	}

Wenn ich nun die Verbindung zur DB am Ende der Clientsitzung kappe, kappe ich doch sicher auch die der anderen noch aktiven Clients oder?

Wenn ich die Verbindung offen lasse und bei jeden Client neu initialisiere... läuft mir dann irgendwann der Speicher voll oder wird das alte Objekt überschrieben?


Grüße

Stefan
 
wo steht der Code? In einem Servlet?

Verwende am besten einen Connection-Pool
 
Ja richtig.

Kann ich die Connections für die einzelnen Clients in eine Hashmap packen? Diese würden sich dann ja am Ende der Sitzung einfach auflösen lassen.
 
Ein Connectionpool ist 'ne gute Idee, vor allen Dingen aber schliesse das ResultSet, das Statement und die Connection!!
 
Ich habe mir mal eine Class gezogen und spiele damit rum.

Ich packe in jede Eventclass jenes...

Java:
			ConnectionPool cp = new ConnectionPool("org.gjt.mm.mysql.Driver", mysql_connection);
			Connection con = cp.getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = null;
			stmt.executeUpdate("UPDATE profil_cams SET cam_status = NULL, cam_last_active = NOW() WHERE user_id = '" + UserID.get(Integer.toString(client.getClientId())) + "'");
			stmt.close();
			cp.closeConnection(con);

Ich habe hier auf der Testumgebung jedoch einen extremen delay beim Connect auf die DB da diese auf einem absolut langsamen Rechner läuft.

Ist es sinnvoll dergleichen auch bei einem Timer vorzugehen, der alle 5 Sek. die DB checkt? Das ist ja jedes mal ein Connect.

Grüße

Stefan
 
öffne die connection in Servlet#init und schließe sie in Servlet#destroy oder noch besser: schreib dir DAOs
 
Ich glaube mit DAOs werde ich mich später befassen müssen. Die Zeit wird knapp🙁 So wie ich das gerade gelesen habe, könnte ich mit DAO's auch disconnect's der DB abfangen oder? Wäre natürlich mehr als praktisch wenn dem so ist.

Den Path habe ich aktualisiert.


Danke auf jeden Fall schon mal für die Hilfe!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben