Я пытаюсь найти лучшую структуру для пулов соединений, чтобы я мог получить доступ к пулу подключений из любого сервлета и установить соединение с моей базой данных. Я слежу за некоторыми учебными пособиями по настройке и настройке пула данных и пула соединений, и все они инициализируются и доступны в классах, расширяющих HttpServlet. Так это выглядит примерно так:Лучшая структура для объединения пула с Java EE
public class DatabaseConnector extends HttpServlet {
private static final long serialVersionUID = 1L;
private DataSource dataSource;
private Connection connection;
private Statement statement;
public void init() throws ServletException {
try {
// Get DataSource
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/test");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#HttpServlet()
*/
public DatabaseConnector() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet resultSet = null;
try {
// Get Connection and Statement
connection = dataSource.getConnection();
statement = connection.createStatement();
String query = "SELECT * FROM STUDENT";
resultSet = statement.executeQuery(query);
while (resultSet.next()) {
System.out.println(resultSet.getString(1) + resultSet.getString(2) + resultSet.getString(3));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if (resultSet != null) {resultSet.close();}
if (statement != null) {statement.close();}
if (connection != null) {connection.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Он похож на меня, что это соединение бассейн только для этого сервлета, который будет только распределять соединения, когда запрос прибудете посылается это сервлеты URL. Что делать, если я хочу иметь еще один сервлет, которому необходимо получить доступ к базе данных. Я думал просто удалить методы doGet и doPost в этом сервлете и оставить init, чтобы пул соединений был инициализирован во время выполнения, а затем имел ссылку на этот сервлет, который можно было бы использовать в других сервлетах. Однако это не похоже на правильный путь для меня. Каков наилучший способ структурирования пула соединений, к которому можно получить доступ со всех сервлетов и слушателей?
Благодарим за помощь!
Вы получаете соединение с DataSource (который является интерфейсом к пулу подключений). Источник данных получен из JNDI. Если вы используете один и тот же код в любом другом классе вашего webapp, то DataSource будет таким же: все классы получат соединения от того же источника данных, который зарегистрирован в JNDI. –