Вие съхранявате уникален източник на данни (и връзка, и dbMainConnection) в статичен променлива на вашия клас. Всеки път, когато някой поиска източник на данни, вие заменяте предишния с нов. Ако възникне изключение при получаване на източник на данни от JNDI, статичният източник на данни остава такъв, какъвто е. Не трябва да съхранявате нищо в статична променлива. Тъй като вашият клас dbMainConnection е конструиран с името на база данни и има няколко имена на база данни, няма смисъл да го правите сингълтън.
Просто използвайте следния код за достъп до източника на данни:
public final class DataSourceUtil {
/**
* Private constructor to prevent unnecessary instantiations
*/
private DataSourceUtil() {
}
public static DataSource getDataSource(String name) {
try {
Context ctx = new InitialContext();
String database = "jdbc/" + name;
return (javax.sql.DataSource) ctx.lookup (database);
}
catch (NamingException e) {
throw new IllegalStateException("Error accessing JNDI and getting the database named " + name);
}
}
}
И позволете на обаждащите се да получат връзка от източника на данни и да го затворят, когато приключат с използването му.