Вопросы по Java EE

Статус: Offline
Реєстрація: 30.03.2011
Повідом.: 148
Вопросы по Java EE

Всем доброго времени суток. Изучаю java, делаю тестовое задание, возник вопрос как пользоваться connection pool.

Получаю соединение таким образом(описан в этой
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
):

Код:
InitialContext initContext= new InitialContext();
DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/dbconnect");
Connection conn = ds.getConnection();

В статье написано:
Если все открытые соединения уже заняты, создаётся новое. Как только пользователь освобождает одно из уже существующих соединений, оно становится доступно для других пользователей. Если соединение долго не используется, оно закрывается.
"Освободждает" - имеется в виду вызывает close? Или просто соединение не используется?
Необходимо ли закрывать соединения, если я использую пул соединений?

Как вообще правильно используют данный способ. Если мне необходимо соединение каждый раз я получаю новый InitialContext->ds->connection. Или заводят синглтон, в котором хранят ссылку на DataSource
 
Останнє редагування:
Для начала было бы полезно просто почитать об пулах соединений, а потом уже что-то делать.
Соединение нужно закрывать в любом случае, т.к. часто код пишется без пула, а лишь со временем его добавляют. Реализация пула, в свою очередь беспокоится только о том, что бы хранить созданные вами соединения и понимать, какие из них используются, а какие свободны. Исходя из этого можно предположить, что при вызове метода close() у соединения пулл отметит его как свободное у себя и позже сможет предоставить вам же или кому либо еще.
 
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить
 
Останнє редагування:
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить

захайди свою кнопку по условию
 
захайди свою кнопку по условию

Да я так и сделал:
Код:
<input type="submit" name="submit" value="Add" 
formaction="add" <%= (status != null) ? "hidden=\"hidden\"" : ""%>>

<input class= type="submit" name="submit" value="Save" 
 formaction="save" <%= (status == null) ? "hidden=\"hidden\""  : ""%>>

<input class="submit_button" type="submit" name="submit" value="Cancel"  
 formaction="index.jsp">,


просто думал что может есть какой-нибудь более элегантный) способ.
 
Ну а чего, нормальный такой пхп-шный код получился, только на джаве:)
 
Да я так и сделал:
Код:
<input type="submit" name="submit" value="Add" 
formaction="add" <%= (status != null) ? "hidden=\"hidden\"" : ""%>>

<input class= type="submit" name="submit" value="Save" 
 formaction="save" <%= (status == null) ? "hidden=\"hidden\""  : ""%>>

<input class="submit_button" type="submit" name="submit" value="Cancel"  
 formaction="index.jsp">,


просто думал что может есть какой-нибудь более элегантный) способ.

Та не, такое часто практикуется и не только в jsp, но и при использовании шаблонизаторов.
Кстати использование java кода в jsp - это моветон.
 
Кстати использование java кода в jsp - это моветон.

1.Так вот и спрашиваю: "как от этого уйти?"

2. Ещё такой вопрос.
Тестирую сервлет. Тесты лежат в пакете test, а код приложения в пакете main.
Естественно тест не видит методы doGet, doPost и т.д.
Я вижу два выхода:
-Ложить каждый тест в пакет тестируемого класса
-Делать класс адаптер для каждого тестируемого класса

Интересует как решается данная задача в коммерческих проектах?
 
Останнє редагування:
1.Так вот и спрашиваю: "как от этого уйти?"

2. Ещё такой вопрос.
Тестирую сервлет. Тесты лежат в пакете test, а код приложения в пакете main.
Естественно тест не видит методы doGet, doPost и т.д.
Я вижу два выхода:
-Ложить каждый тест в пакет тестируемого класса
-Делать класс адаптер для каждого тестируемого класса

Интересует как решается данная задача в коммерческих проектах?

1. Почитай про jstl <c:if>
2. Ты должен для кода и тестов создать аналогичную структуру пакетов. Почитай про структуру проекта мавен.
 
Созрел ещё такой вопрос:
Как тестировать DAO?

Например есть класс UserDao с методом

Код:
public User selectById(int key) throws DAOException
{
DataSource ds = ConnectionPoolUtil.getDataSource();
ds.getConnection
ds.getPrepStatement
{
Запихиваю в стейтмент несколько значений
выполняю execUpdate
}
}


Можно сделать ds полем класса с сеттером и создавать в Конструкторе.
А в тесте устанавливать в него через сеттер Mock и определять поведение.
Но тогда получается я переделываю класс только для того чтоб я мог его протестировать))))

Такой же вопрос возникает при тестировании сервлетов.(В смысле есть переменные которые создаются внутри методов doGet, doPost)
 
Останнє редагування:
Созрел ещё такой вопрос:
Как тестировать DAO?

Например есть класс UserDao с методом

Код:
public User selectById(int key) throws DAOException
{
DataSource ds = ConnectionPoolUtil.getDataSource();
ds.getConnection
ds.getPrepStatement
{
Запихиваю в стейтмент несколько значений
выполняю execUpdate
}
}


Можно сделать ds полем класса с сеттером и создавать в Конструкторе.
А в тесте устанавливать в него через сеттер Mock и определять поведение.
Но тогда получается я переделываю класс только для того чтоб я мог его протестировать))))

Такой же вопрос возникает при тестировании сервлетов.(В смысле есть переменные которые создаются внутри методов doGet, doPost)

Сумбурно как-то написал. Код не должен знать, что его тестируют. Если ты не можешь протестить свой метод без подстройки под тестирование - его надо переписать. Обычно тяжело тестить, если метод делает слишком много всего. Почитай про solid.

Зачем моки? Непонятно. Почитай про dbunit.
 
Назад
Зверху Знизу