Przechowujesz unikalne źródło danych (oraz połączenie i dbMainConnection) w statycznym zmienna Twojej klasy. Za każdym razem, gdy ktoś prosi o źródło danych, zastępujesz poprzednie nowym. Jeśli podczas pobierania źródła danych z JNDI wystąpi wyjątek, statyczne źródło danych pozostanie bez zmian. Nie powinieneś przechowywać niczego w zmiennej statycznej. Ponieważ twoja klasa dbMainConnection jest skonstruowana z nazwą bazy danych, a istnieje kilka nazw baz danych, nie ma sensu, aby była pojedyncza.
Wystarczy użyć następującego kodu, aby uzyskać dostęp do źródła danych:
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);
}
}
}
I pozwól dzwoniącym uzyskać połączenie ze źródła danych i zamknąć je, gdy skończą z niego korzystać.