2010-06-14 2 views
7

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

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

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

ответ

4

С помощью 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, должен работать. Код выше будет работать, например, с этой весной конфигурацией:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/my-db"/> 
</bean> 
+0

Это именно то, что я искал, спасибо. – Wiszh

+0

Lauri, как 'JndiObjectFactoryBean' знает, чтобы искать' my-db' в каталоге Spring? Разве вам не нужно предоставлять контекстную среду? В частности, в этой среде, для какой ценности вы бы установили свойство 'java.naming.factory.initial'? –

+0

Лаури, пожалуйста, см. Мой вопрос по адресу http://stackoverflow.com/questions/5682732/what-value-should-property-java-naming-factory-initial-have-when-using-springs. –

1

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

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

0

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

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

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

Go here to read more about it.