Voor het cachen van connecties naar de database heb ik de volgende classe geschreven, Ik heb alleen het idee dat ik iets vergeet of over het hoofd gezien heb. Iemand een idee wat ik nog toe zou moeten voegen?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| package net.javahova.rdbms;
import java.sql.*;
import java.util.*;
import org.gjt.mm.mysql.*;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author
* @version 1.0
*/
public class PoolManager
{
private int nrConnections = 5;
private String url = "jdbc:mysql://localhost/javahova";
private String user = "root";
private String pass = "";
private LinkedList freeConnections = new LinkedList();
private LinkedList takenConnections = new LinkedList();
private Connection[] myConnections;
// make it into a singleton sometime
public PoolManager()
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
myConnections = new Connection[nrConnections];
for (int i = 0; i < nrConnections; i++)
{
checkConnection(myConnection[i]);
freeConnections.add(myConnection[i]);
}
}
private void checkConnection(Connection myConnection) throws Exception
{
if (myConnection == null)
{
myConnection = DriverManager.getConnection(url, user, pass);
}
else if (myConnection.isClosed())
{
myConnection = DriverManager.getConnection(url, user, pass);
}
}
public synchronized Connection getConnection() throws Exception
{
// get connection from the queue,
Connection myConnection = (Connection) freeConnections.getFirst();
// check if the connection is still valid
checkConnection(myConnection);
// add connection to taken out
takenConnections.add(myConnection);
// log connenction (where is te api ;) )
// remove connection from free queue
freeConnections.removeFirst();
displayInfo();
return myConnection;
}
public synchronized void returnConnection(Connection MyConnection) throws Exception
{
takenConnections.remove(myConnection);
freeConnections.add(myConnection);
displayInfo();
}
private void displayInfo()
{
System.out.print("Available connections: " + freeConnections.size());
System.out.print("Taken connections: " + takenConnections.size());
}
} |