2010-06-14 14 views
7

Quiero probar algunas nuevas funcionalidades que son parte de una aplicación web interna. Este nuevo código utiliza una conexión de base de datos proporcionada normalmente por un servidor de aplicaciones (tomcat).Cómo puedo falsificar una búsqueda de jndi para una fuente de datos sin un servidor de aplicaciones

No quiero volver a crear toda la aplicación web en mi máquina local para probar el nuevo código, ya que solo necesito ejecutar una función.

¿Alguien sabe cómo puedo 'falsificar' un Contexto, o Datasource, para recuperar la configuración de la base de datos, sin realmente crear una instancia de aplicación web en un servidor?

Respuesta

4

Con la ayuda de la primavera SimpleNamingContextBuilder y Apache BasicDataSource, se puede hacer algo como esto (por lo general tienen esto en un bloque estático en las clases de prueba que necesita 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(); 

El valor de jndi_name puede tener un aspecto de esta manera: java:comp/env/jdbc/my-db

Una vez configurado esto, debería funcionar el código que normalmente busca la conexión de la base de datos a través de JNDI. El código anterior sería, por ejemplo, trabajar con esta configuración de primavera:

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

Esto es justo lo que estaba buscando, gracias. – Wiszh

+0

Lauri, ¿cómo sabe 'JndiObjectFactoryBean' buscar' my-db' en el directorio de Spring? ¿No tienes que proporcionar el entorno de contexto? En particular, en este entorno, ¿a qué valor establecería la propiedad 'java.naming.factory.initial'? –

+0

Lauri, consulte mi pregunta en http://stackoverflow.com/questions/5682732/what-value-should-property-java-naming-factory-initial-have-when-using-springs. –

0

Con TomcatJNDI puede acceder a todos los recursos JNDI configuró dentro de Tomcat como solía hacer en su aplicación web. El código para lograrlo es simple y se ve como

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.

Cuestiones relacionadas