Если все открытые соединения уже заняты, создаётся новое. Как только пользователь освобождает одно из уже существующих соединений, оно становится доступно для других пользователей. Если соединение долго не используется, оно закрывается.
"Освободждает" - имеется в виду вызывает close? Или просто соединение не используется?
Необходимо ли закрывать соединения, если я использую пул соединений?
Как вообще правильно используют данный способ. Если мне необходимо соединение каждый раз я получаю новый InitialContext->ds->connection. Или заводят синглтон, в котором хранят ссылку на DataSource
Для начала было бы полезно просто почитать об пулах соединений, а потом уже что-то делать.
Соединение нужно закрывать в любом случае, т.к. часто код пишется без пула, а лишь со временем его добавляют. Реализация пула, в свою очередь беспокоится только о том, что бы хранить созданные вами соединения и понимать, какие из них используются, а какие свободны. Исходя из этого можно предположить, что при вызове метода close() у соединения пулл отметит его как свободное у себя и позже сможет предоставить вам же или кому либо еще.
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить
2. Ещё такой вопрос.
Тестирую сервлет. Тесты лежат в пакете test, а код приложения в пакете main.
Естественно тест не видит методы doGet, doPost и т.д.
Я вижу два выхода:
-Ложить каждый тест в пакет тестируемого класса
-Делать класс адаптер для каждого тестируемого класса
Интересует как решается данная задача в коммерческих проектах?
2. Ещё такой вопрос.
Тестирую сервлет. Тесты лежат в пакете test, а код приложения в пакете main.
Естественно тест не видит методы doGet, doPost и т.д.
Я вижу два выхода:
-Ложить каждый тест в пакет тестируемого класса
-Делать класс адаптер для каждого тестируемого класса
Интересует как решается данная задача в коммерческих проектах?
public User selectById(int key) throws DAOException
{
DataSource ds = ConnectionPoolUtil.getDataSource();
ds.getConnection
ds.getPrepStatement
{
Запихиваю в стейтмент несколько значений
выполняю execUpdate
}
}
Можно сделать ds полем класса с сеттером и создавать в Конструкторе.
А в тесте устанавливать в него через сеттер Mock и определять поведение.
Но тогда получается я переделываю класс только для того чтоб я мог его протестировать))))
Такой же вопрос возникает при тестировании сервлетов.(В смысле есть переменные которые создаются внутри методов doGet, doPost)
public User selectById(int key) throws DAOException
{
DataSource ds = ConnectionPoolUtil.getDataSource();
ds.getConnection
ds.getPrepStatement
{
Запихиваю в стейтмент несколько значений
выполняю execUpdate
}
}
Можно сделать ds полем класса с сеттером и создавать в Конструкторе.
А в тесте устанавливать в него через сеттер Mock и определять поведение.
Но тогда получается я переделываю класс только для того чтоб я мог его протестировать))))
Такой же вопрос возникает при тестировании сервлетов.(В смысле есть переменные которые создаются внутри методов doGet, doPost)
Сумбурно как-то написал. Код не должен знать, что его тестируют. Если ты не можешь протестить свой метод без подстройки под тестирование - его надо переписать. Обычно тяжело тестить, если метод делает слишком много всего. Почитай про solid.