views:

79

answers:

2

I want to test some new functionality which is part of an internal web app. This new code uses a database connection normally provided by an app server (tomcat).

I do not want to recreate the entire web app on my local machine to test the new code, since I only need to run one function.

Does anyone know how I can 'spoof' a Context, or Datasource, to retrieve the database config, without actually creating a web app instance on a server?

Thanks

+1  A: 

With the help of Spring SimpleNamingContextBuilder and Apache BasicDataSource, you can do something like this (I usually have this in a static block in test classes that need 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();

The value of jndi_name might look like this: java:comp/env/jdbc/my-db

Once this is set up, code that normally looks up the database connection via JNDI should work. The code above would for example work with this Spring config:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
</bean>
Lauri Lehtinen
This is just what I was looking for, thanks.
Wiszh
A: 

There might be a way to do what you want, but I'm pretty sure it'll be 10 times more complicated than just installing Tomcat on your machine.

Mike Baranczak
And this is not an answer. Maybe a comment
Alexander Pogrebnyak