package it.unisa.sesa.repominer.db;
import it.unisa.sesa.repominer.preferences.Preferences;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ConnectionPool {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static String DB_URL;
// Database credentials
private static String USER;
private static String PASS;
private static ConnectionPool INSTANCE;
private List<Connection> pool = new ArrayList<>();
private ConnectionPool() {
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
this.fillConnectionPool(3);
}
public Connection getConnection() {
if (pool.size() <= 2) {
this.fillConnectionPool(3);
}
return this.pool.remove(0);
}
public void releaseConnection(Connection connection) {
pool.add(connection);
}
public static ConnectionPool getInstance() {
if (INSTANCE == null) {
INSTANCE = new ConnectionPool();
}
return INSTANCE;
}
private void fillConnectionPool(int howMany) {
for (int i = 0; i < howMany; i++) {
Connection conn = this.createConnection();
if (conn != null) {
pool.add(conn);
}
}
}
private Connection createConnection() {
String host = Preferences.getDatabaseHost();
int port = Preferences.getDatabasePort();
String dbname = Preferences.getDatabaseName();
String dburl = "jdbc:mysql://" + host;
if (port != 3306) {
dburl += ":" + port;
}
DB_URL = dburl + "/" + dbname;
USER = Preferences.getDatabaseUser();
PASS = Preferences.getDatabasePassword();
try {
return DriverManager.getConnection(DB_URL, USER, PASS);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}