Как я могу подменить поиск jndi для источника данных без сервера приложений - PullRequest
7 голосов
/ 14 июня 2010

Я хочу протестировать некоторые новые функции, которые являются частью внутреннего веб-приложения.Этот новый код использует соединение с базой данных, обычно предоставляемое сервером приложений (tomcat).

Я не хочу воссоздавать все веб-приложение на моем локальном компьютере для тестирования нового кода, поскольку мне нужно только запустить одноfunction.

Кто-нибудь знает, как я могу «подделать» контекст или источник данных для получения конфигурации базы данных без фактического создания экземпляра веб-приложения на сервере?

Ответы [ 3 ]

4 голосов
/ 14 июня 2010

С помощью Spring SimpleNamingContextBuilder и Apache BasicDataSource вы можете сделать что-то вроде этого (у меня обычно это в статическом блоке в тестовых классах, которым требуется JNDI):

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(db_driver_name);
dataSource.setUrl(db_connection_url);
dataSource.setUsername(db_username);
dataSource.setPassword(db_password);
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind(jndi_name, dataSource);
builder.activate();

Значение jndi_name может выглядеть следующим образом: java:comp/env/jdbc/my-db

Как только это настроено, код, который обычно ищет соединение с базой данных через JNDI, должен работать. Приведенный выше код, например, будет работать с этой конфигурацией Spring:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
</bean>
1 голос
/ 09 июня 2011

Решения, перечисленные здесь, выглядят несколько проще, чем то, что я придумал год назад, когда мне приходилось делать то же самое. Я в основном сделал свою собственную очень простую реализацию DataSource и добавил ее в новый начальный контекст.

http://penguindreams.org/blog/running-beans-that-use-application-server-datasources-locally/

0 голосов
/ 28 октября 2017

С TomcatJNDI вы можете получить доступ ко всем ресурсам JNDI, настроенным в Tomcat, которые используются в веб-приложении. Код для его достижения прост и выглядит как

TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processContextXml(contextXmlFile);
tomcatJNDI.start();

DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource")

Перейдите сюда, чтобы узнать больше об этом.

...