powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jndi junit
12 сообщений из 12, страница 1 из 1
jndi junit
    #38430864
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет всем!
У меня есть веб приложение (tomcat 7) которое использует jndi что бы получить соединение с БД.

Код: java
1.
2.
3.
4.
5.
6.
public static Connection getContextConnection() throws NamingException,
            SQLException {
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/postgres");
        return ds.getConnection();
    }



Все работает.

Так же у меня есть unit тесты. Которому тоже нужно соединение с БД. Но вне веб контейнера я не могу получить соединение. поэтому приходиться использовать прямое соединение.

Код: java
1.
2.
3.
4.
public static Connection getDirectConnection() throws ClassNotFoundException, SQLException {
        Class.forName("org.postgresql.Driver");
        return DriverManager.getConnection("jdbc:postgresql://localhost:5432/database", "user", "pass");
    }



можно как нибудь что бы использовать только одно?
...
Рейтинг: 0 / 0
jndi junit
    #38430904
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spring? и на тестах загружать другой application contex с подключением к тестовой бд.
...
Рейтинг: 0 / 0
jndi junit
    #38430925
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv,

Нет не спринг. Обычное веб приложение. а как это " тестах загружать другой application contex"?
...
Рейтинг: 0 / 0
jndi junit
    #38430956
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему же вне контейнера нельзя использовать JNDI? Его же для того и придумывали, чтобы от контейнера абстрагироваться. Найдите какую-нибудь подходящую реализацию и используйте. Например, вот гугл подсказал: http://code.google.com/p/osjava/wiki/SimpleJNDI

Сам не использовал. Только теория.
...
Рейтинг: 0 / 0
jndi junit
    #38431029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhas, очень не советую в юнит тесты включать зависимости от БД. Это больше
интеграционное чем модульное тестирование получается. Постарайтесь
использовать Mocks для Dao в секции @Before.
...
Рейтинг: 0 / 0
jndi junit
    #38431104
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Я тестирую динамически SQL очень сложно это сделать без БД.
...
Рейтинг: 0 / 0
jndi junit
    #38431132
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhasЯ тестирую динамически SQL очень сложно это сделать без БД.
Например?
...
Рейтинг: 0 / 0
jndi junit
    #38431155
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Например Select из БД формируется в рантайме. Я передаю в построитель список полей, группировки, условия выборки, порядок соединения таблиц и т.д. в виде объектов, в ответ получаю sql строку. вот ее мне надо проверить на сколько правильно сработал мой построитель.
...
Рейтинг: 0 / 0
jndi junit
    #38431205
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olzhas,
есть вариант - опубликовать DataSource не java-контексте, а в глобальном. В этом случае к нему можно оращаться удаленно. И в контейнере, и в тестах (при запущенном сервере) сработает такой код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public Connection getRemoteConnection() throws NamingException {
	Properties jndiProperties = new Properties();
	jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
	jndiProperties.put(Context.PROVIDER_URL, "jnp://localhost:1099");  

	Context ctx = new InitialContext(jndiProperties);
	DataSource ds = (DataSource)ctx.lookup("comp/env/jdbc/postgres"); //глобальный, без java:
	return ds.getConnection();
}


Но этот совет довольно-таки вредный: в DataSource может любой зайти удаленно.
Поэтому рекомендуется иметь 2 DataSource, для учебных и боевых целей, и строку с его названием положить в ресурсы.
Плюс, не уверен, сработает ли на томкате, так как это не J2EE сервер
...
Рейтинг: 0 / 0
jndi junit
    #38431235
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhasmayton,
Например Select из БД формируется в рантайме. Я передаю в построитель список полей, группировки, условия выборки, порядок соединения таблиц и т.д. в виде объектов, в ответ получаю sql строку. вот ее мне надо проверить на сколько правильно сработал мой построитель.
А зачем тебе БД?

Твой построитель на выхлопе выдаёт текстовую строку. Вот и проверяй ее на совпадение.
...
Рейтинг: 0 / 0
jndi junit
    #38431258
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Я понял ход ваших мыслей. И да, о том что выговорите более ближе к юнит тестированию, а что я хочу больше уже интеграционное, плюс у меня зависимость от БД (кто то удалит таблицу и тест не сработает). Опять таки из-за лени хочется меньшим числом тестов все проверять.

Спасибо за направление.
...
Рейтинг: 0 / 0
jndi junit
    #38431276
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ленись.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / jndi junit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]