У меня есть основной сервлет, который обрабатывает запросы post/get.
Я использую пул соединений (jdbc/mysql с Glassfish v3), и мой код сервлета:
public class Controller extends HttpServlet {
private DataSource datasource;
@Override
public void init() throws ServletException {
super.init();
try {
//Database Connection pooling:
InitialContext ctx = new InitialContext();
datasource = (DataSource)ctx.lookup("jdbc/MySQLPool");
}
catch (Exception e) {
e.printStackTrace();
}
}
private Connection getConnection() throws SQLException {
return datasource.getConnection();
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection connection=null;
try {
connection = datasource.getConnection();
Object obj= cmdFactory.getInstance().getCommand(Cmd).execute(connection);
}
etc... и в конце сервлета в блоке finally я закрываю соединение
Итак, прямо сейчас я передаю объект «соединение» в качестве параметра в последней строке, который будет использоваться другими (не сервлетами) классами Java через нижние уровни приложения. Это неправильно? лучше передать объект источника данных (а затем в конкретных классах сделать datasource.getConnection())? или есть что-то похожее на "getServletContext().getAttr(database)", которое можно использовать в других классах Java для получения этого соединения?