Змінюй хід війни! Допомагай ЗСУ!

Вопросы по Java EE

🔴 11:21 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 30.03.2011
Повідом.: 148
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #1
Вопросы по 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
 
Останнє редагування:
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #2
Для начала было бы полезно просто почитать об пулах соединений, а потом уже что-то делать.
Соединение нужно закрывать в любом случае, т.к. часто код пишется без пула, а лишь со временем его добавляют. Реализация пула, в свою очередь беспокоится только о том, что бы хранить созданные вами соединения и понимать, какие из них используются, а какие свободны. Исходя из этого можно предположить, что при вызове метода close() у соединения пулл отметит его как свободное у себя и позже сможет предоставить вам же или кому либо еще.
 
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #3
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить
 
Останнє редагування:
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #4
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #5
Возник ещё такой вопрос: Есть jsp страница: несколько полей, несколько кнопок.
При при нажатии на кнопку вызывается сервлет.
Как реализовать сервлет таким образом чтоб отрендерилась такая же страница, только без одной кнопки. Шаблон тот же, просто одну кнопку надо удалить

захайди свою кнопку по условию
 
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #6
захайди свою кнопку по условию

Да я так и сделал:
Код:
<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">,


просто думал что может есть какой-нибудь более элегантный) способ.
 
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #7
Ну а чего, нормальный такой пхп-шный код получился, только на джаве:)
 
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #8
Да я так и сделал:
Код:
<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 - это моветон.
 
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #9
Кстати использование java кода в jsp - это моветон.

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

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

Интересует как решается данная задача в коммерческих проектах?
 
Останнє редагування:
  • 🔴 11:21 Повітряна тривога в Харків.обл.
  • #10
1.Так вот и спрашиваю: "как от этого уйти?"

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

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

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

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

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


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

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

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

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


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

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

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

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