Du gemmer en unik datakilde (og forbindelse og dbMainConnection) i en statisk variabel i din klasse. Hver gang nogen beder om en datakilde, erstatter du den forrige med den nye. Hvis der opstår en undtagelse, mens du henter en datakilde fra JNDI, forbliver den statiske datakilde, som den er. Du bør ikke gemme noget i en statisk variabel. Da din dbMainConnection-klasse er konstrueret med navnet på en database, og der er flere databasenavne, giver det ingen mening at gøre den til en singleton.
Brug blot følgende kode for at få adgang til datakilden:
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);
}
}
}
Og lad opkalderne få en forbindelse fra datakilden og lukke den, når de er færdige med at bruge den.