Du lagrar en unik datakälla (och anslutning och dbMainConnection) i en statisk variabel för din klass. Varje gång någon frågar efter en datakälla ersätter du den tidigare med den nya. Om ett undantag inträffar när en datakälla hämtas från JNDI, förblir den statiska datakällan som den är. Du bör inte lagra något i en statisk variabel. Eftersom din dbMainConnection-klass är konstruerad med namnet på en databas, och det finns flera databasnamn, är det ingen mening att göra den till en singelton.
Använd bara följande kod för att komma åt datakällan:
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);
}
}
}
Och låt uppringarna få en anslutning från datakällan och stänga den när de har slutat använda den.