
Test de integración con JNDI
16 marzo 2011He estado un buen rato buscando cómo hacer que un test de integración tenga acceso al datasource configurado mediante JNDI en una aplicación basada en Spring e Hibernate, y aunque finalmente ha sido muy sencillo las explicaciones que he encontrado no explicaban el quid de la cuestión.
Spring 2.5 ha introducido un stub para ofrecer búsquedas mediante JNDI, SimpleNamingContextBuilder. Pero lo interesante es que esté disponible cuando se ha de resolver la llamada, que en este caso es durante la carga de la configuración de Hibernate. Para ello el truco está en configurarlo en el constructor del test, de la siguiente forma:
try {
SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
DriverManagerDataSource driver = new DriverManagerDataSource("jdbc:mysql://localhost:3306/myapp", "root", "admin");
driver.setDriverClassName("com.mysql.jdbc.Driver");
builder.bind("java:comp/env/jdbc/DSMyapp", driver);
} catch (NamingException e) {
e.printStackTrace();
}
De esta forma, cuando se haga la llamada JNDI por el nombre env/jdbc/DSMyapp se encontrará.
La respuesta final la he encontrado en el libro Pro Spring 2.5 de Apress.