Bạn đang lưu trữ một nguồn dữ liệu duy nhất (và kết nối, và dbMainConnection) trong tĩnh biến của lớp của bạn. Mỗi khi ai đó yêu cầu nguồn dữ liệu, bạn thay thế nguồn trước bằng nguồn mới. Nếu một ngoại lệ xảy ra trong khi nhận một nguồn dữ liệu từ JNDI, thì nguồn dữ liệu tĩnh vẫn như cũ. Bạn không nên lưu trữ bất cứ thứ gì trong một biến tĩnh. Vì lớp dbMainConnection của bạn được xây dựng với tên của một cơ sở dữ liệu và có một số tên cơ sở dữ liệu, nên không có ý nghĩa gì khi đặt nó thành một lớp đơn.
Chỉ cần sử dụng mã sau để truy cập nguồn dữ liệu:
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);
}
}
}
Và cho phép người gọi nhận được kết nối từ nguồn dữ liệu và đóng nó khi họ sử dụng xong.